Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 возможно ли загнать Case/IF-логику (оракловского типа) в FBI-индекс(UNIQUE)?  [new]
DBAshnik
Member

Откуда:
Сообщений: 302
на оракле есть такое:

CREATE UNIQUE INDEX UIDX_START_SASTAT ON START_SAF( CASE STATUS WHEN 'NEW' THEN STATUS WHEN 'PROCESS' THEN STATUS ELSE NULL END );


можно ли перевести это на MS SQL (желательно без написания внешней функции)?
Cпасибо!
9 апр 19, 18:02    [21857591]     Ответить | Цитировать Сообщить модератору
 Re: возможно ли загнать Case/IF-логику (оракловского типа) в FBI-индекс(UNIQUE)?  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1403
DBAshnik, читайте про фильтрованные индексы. И помните - в ms sql server-e значения null попадают в индекс наравне с остальными, в отличие от ораклового поведения, где bull/значения в индексе не хранятся (bitmap и индекс табличного кластера - не в счёт)
9 апр 19, 18:08    [21857604]     Ответить | Цитировать Сообщить модератору
 Re: возможно ли загнать Case/IF-логику (оракловского типа) в FBI-индекс(UNIQUE)?  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1403
DBAshnik, отфильтрованные индексы: https://docs.microsoft.com/ru-ru/sql/relational-databases/indexes/create-filtered-indexes?view=sql-server-2017
9 апр 19, 18:10    [21857610]     Ответить | Цитировать Сообщить модератору
 Re: возможно ли загнать Case/IF-логику (оракловского типа) в FBI-индекс(UNIQUE)?  [new]
DBAshnik
Member

Откуда:
Сообщений: 302
Щукина Анна
DBAshnik, читайте про фильтрованные индексы. И помните - в ms sql server-e значения null попадают в индекс наравне с остальными, в отличие от ораклового поведения, где bull/значения в индексе не хранятся (bitmap и индекс табличного кластера - не в счёт)


таблица крохотная, индекс создаётся не ради производительности тут, а ради unique-constraint! (который в Оракл создаётся автоматичесики при создании Unique-index-a! )
Cпасибо!
10 апр 19, 12:53    [21858196]     Ответить | Цитировать Сообщить модератору
 Re: возможно ли загнать Case/IF-логику (оракловского типа) в FBI-индекс(UNIQUE)?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6376
DBAshnik,
автор
ндекс создаётся не ради производительности тут, а ради unique-constraint! (который в Оракл создаётся автоматичесики при создании Unique-index-a! )

вас ждёт ещё столько нового....
10 апр 19, 13:00    [21858208]     Ответить | Цитировать Сообщить модератору
 Re: возможно ли загнать Case/IF-логику (оракловского типа) в FBI-индекс(UNIQUE)?  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2175
DBAshnik,

https://docs.microsoft.com/ru-ru/sql/relational-databases/tables/create-unique-constraints?view=sql-server-2017
10 апр 19, 14:17    [21858323]     Ответить | Цитировать Сообщить модератору
 Re: возможно ли загнать Case/IF-логику (оракловского типа) в FBI-индекс(UNIQUE)?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28723
DBAshnik
Щукина Анна
DBAshnik, читайте про фильтрованные индексы. И помните - в ms sql server-e значения null попадают в индекс наравне с остальными, в отличие от ораклового поведения, где bull/значения в индексе не хранятся (bitmap и индекс табличного кластера - не в счёт)


таблица крохотная, индекс создаётся не ради производительности тут, а ради unique-constraint! (который в Оракл создаётся автоматичесики при создании Unique-index-a! )
Cпасибо!
делается не только проверка уникальности, но и проверка значений?
Тогда проще это написать как простой уникальный индекс + check
10 апр 19, 15:08    [21858403]     Ответить | Цитировать Сообщить модератору
 Re: возможно ли загнать Case/IF-логику (оракловского типа) в FBI-индекс(UNIQUE)?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28723
alexeyvg
DBAshnik
пропущено...


таблица крохотная, индекс создаётся не ради производительности тут, а ради unique-constraint! (который в Оракл создаётся автоматичесики при создании Unique-index-a! )
Cпасибо!
делается не только проверка уникальности, но и проверка значений?
Тогда проще это написать как простой уникальный индекс + check
Хотя нет, у вас сложнее.
У вас в таблице допустимо до трёх значений, по одному 'NEW' и 'PROCESS', плюс ещё произвольное или NULL
10 апр 19, 15:10    [21858406]     Ответить | Цитировать Сообщить модератору
 Re: возможно ли загнать Case/IF-логику (оракловского типа) в FBI-индекс(UNIQUE)?  [new]
DBAshnik
Member

Откуда:
Сообщений: 302
StarikNavy
DBAshnik,

https://docs.microsoft.com/ru-ru/sql/relational-databases/tables/create-unique-constraints?view=sql-server-2017


спасибо, только что мне даёт эта ссылка то? Возможности сделать (u-constraint/u-index) как в Оракл, т.е. чтоб исключить повторение конкретных значений, а других - нет, я пока не вижу!
10 апр 19, 15:11    [21858407]     Ответить | Цитировать Сообщить модератору
 Re: возможно ли загнать Case/IF-логику (оракловского типа) в FBI-индекс(UNIQUE)?  [new]
DBAshnik
Member

Откуда:
Сообщений: 302
alexeyvg
alexeyvg
пропущено...
делается не только проверка уникальности, но и проверка значений?
Тогда проще это написать как простой уникальный индекс + check
Хотя нет, у вас сложнее.
У вас в таблице допустимо до трёх значений, по одному 'NEW' и 'PROCESS', плюс ещё произвольное или NULL


да, допустимо _только_ по одному значению 'NEW' и 'PROCESS'. Остальные (как NULL так и прочие!) могут повторяться!
Или, скажите, я слишком многого хочу за меньшие деньги? ;-))) ( если сравнивать стоимости лицензий ORA vs MS SQL )
10 апр 19, 15:14    [21858413]     Ответить | Цитировать Сообщить модератору
 Re: возможно ли загнать Case/IF-логику (оракловского типа) в FBI-индекс(UNIQUE)?  [new]
invm
Member

Откуда: Москва
Сообщений: 8661
DBAshnik
Или, скажите, я слишком многого хочу за меньшие деньги?
Вы просто хотите, чтоб было так же как в Oracle. А это невозмоно.
CREATE UNIQUE INDEX UIDX_START_SASTAT ON START_SAF(STATUS) WHERE STATUS IN ('NEW', 'PROCESS');
10 апр 19, 15:41    [21858458]     Ответить | Цитировать Сообщить модератору
 Re: возможно ли загнать Case/IF-логику (оракловского типа) в FBI-индекс(UNIQUE)?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28723
invm
Вы просто хотите, чтоб было так же как в Oracle. А это невозмоно.
CREATE UNIQUE INDEX UIDX_START_SASTAT ON START_SAF(STATUS) WHERE STATUS IN ('NEW', 'PROCESS');
Вас DBAshnik может неправильно понять.
Возможно, только записывается проще (как вы написали).
10 апр 19, 15:59    [21858493]     Ответить | Цитировать Сообщить модератору
 Re: возможно ли загнать Case/IF-логику (оракловского типа) в FBI-индекс(UNIQUE)?  [new]
DBAshnik
Member

Откуда:
Сообщений: 302
invm
DBAshnik
Или, скажите, я слишком многого хочу за меньшие деньги?
Вы просто хотите, чтоб было так же как в Oracle. А это невозмоно.
CREATE UNIQUE INDEX UIDX_START_SASTAT ON START_SAF(STATUS) WHERE STATUS IN ('NEW', 'PROCESS');


вау! Так всё оказывается возможно и даже просто! Только синтаксис отличается! Спасибо огромное!!!
10 апр 19, 16:14    [21858533]     Ответить | Цитировать Сообщить модератору
 Re: возможно ли загнать Case/IF-логику (оракловского типа) в FBI-индекс(UNIQUE)?  [new]
DBAshnik
Member

Откуда:
Сообщений: 302
alexeyvg
Возможно, только записывается проще (как вы написали).


так точно! :-)
10 апр 19, 16:15    [21858534]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить