Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
DBAshnik Member Откуда: Сообщений: 410 |
на оракле есть такое: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] Ответить | Цитировать Сообщить модератору |
Щукина Анна Member Откуда: Сообщений: 1507 |
DBAshnik, читайте про фильтрованные индексы. И помните - в ms sql server-e значения null попадают в индекс наравне с остальными, в отличие от ораклового поведения, где bull/значения в индексе не хранятся (bitmap и индекс табличного кластера - не в счёт) |
9 апр 19, 18:08 [21857604] Ответить | Цитировать Сообщить модератору |
Щукина Анна Member Откуда: Сообщений: 1507 |
DBAshnik, отфильтрованные индексы: https://docs.microsoft.com/ru-ru/sql/relational-databases/indexes/create-filtered-indexes?view=sql-server-2017 |
9 апр 19, 18:10 [21857610] Ответить | Цитировать Сообщить модератору |
DBAshnik Member Откуда: Сообщений: 410 |
таблица крохотная, индекс создаётся не ради производительности тут, а ради unique-constraint! (который в Оракл создаётся автоматичесики при создании Unique-index-a! ) Cпасибо! |
||
10 апр 19, 12:53 [21858196] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
DBAshnik,
вас ждёт ещё столько нового.... |
||
10 апр 19, 13:00 [21858208] Ответить | Цитировать Сообщить модератору |
StarikNavy Member Откуда: Москва Сообщений: 2396 |
DBAshnik, https://docs.microsoft.com/ru-ru/sql/relational-databases/tables/create-unique-constraints?view=sql-server-2017 |
10 апр 19, 14:17 [21858323] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31779 |
Тогда проще это написать как простой уникальный индекс + check |
||||
10 апр 19, 15:08 [21858403] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31779 |
У вас в таблице допустимо до трёх значений, по одному 'NEW' и 'PROCESS', плюс ещё произвольное или NULL |
||||
10 апр 19, 15:10 [21858406] Ответить | Цитировать Сообщить модератору |
DBAshnik Member Откуда: Сообщений: 410 |
спасибо, только что мне даёт эта ссылка то? Возможности сделать (u-constraint/u-index) как в Оракл, т.е. чтоб исключить повторение конкретных значений, а других - нет, я пока не вижу! |
||
10 апр 19, 15:11 [21858407] Ответить | Цитировать Сообщить модератору |
DBAshnik Member Откуда: Сообщений: 410 |
да, допустимо _только_ по одному значению 'NEW' и 'PROCESS'. Остальные (как NULL так и прочие!) могут повторяться! Или, скажите, я слишком многого хочу за меньшие деньги? ;-))) ( если сравнивать стоимости лицензий ORA vs MS SQL ) |
||||
10 апр 19, 15:14 [21858413] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
CREATE UNIQUE INDEX UIDX_START_SASTAT ON START_SAF(STATUS) WHERE STATUS IN ('NEW', 'PROCESS'); |
||
10 апр 19, 15:41 [21858458] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31779 |
Возможно, только записывается проще (как вы написали). |
||
10 апр 19, 15:59 [21858493] Ответить | Цитировать Сообщить модератору |
DBAshnik Member Откуда: Сообщений: 410 |
вау! Так всё оказывается возможно и даже просто! Только синтаксис отличается! Спасибо огромное!!! |
||||
10 апр 19, 16:14 [21858533] Ответить | Цитировать Сообщить модератору |
DBAshnik Member Откуда: Сообщений: 410 |
так точно! :-) |
||
10 апр 19, 16:15 [21858534] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |