Унікальні обмеження на незмінні стовпці в SQL Server 2005


12

У цьому одному проекті, над яким я працюю, мені потрібно встановити певне поле, щоб воно було унікальним (не проблема!), Але якщо поле недійсне, я хочу, щоб обмеження було ігноровано. У Sql Server 2008 я використовую відфільтрований індекс, як показано нижче, але це недоступно в попередніх версіях SQL!

CREATE UNIQUE NONCLUSTERED INDEX User_UserName_IUC
ON [User] (pinNr)
WHERE UserName IS NOT NULL

Але я не думаю, що це доступно в SQL Server 2005. Насправді ця публікація в блозі вказує на те, що існує спосіб вирішення проблеми, що використовує тригер, щоб перевірити унікальність. Хтось має приклад цього? чи, можливо, альтернатива?

На жаль, оновлення до SQl Server 2008 не є можливим для цього конкретного клієнта !!

Відповіді:


18

Власне, мені довелося зробити щось подібне колись. Він передбачав створення обчисленої колонки, яка приймає значення стовпця Unique, коли немає, NULLі значення первинного ключа (з деякою іншою логікою, що унеможливлює зіткнення зі значеннями в унікальному стовпчику), і створення унікального індексу на цей стовпець. Ви можете побачити приклад цього та методу запуску тут .


7

Ви можете зробити перегляд (де Ім'я користувача не є нульовим), а потім поставити унікальний індекс проти подання. Ви ніколи не будете використовувати вигляд, він просто буде для цього існувати.

Ви також можете використовувати цю техніку для досягнення унікальності у кількох таблицях, де це, як правило, неможливо.


2
Індексовані представлення даних не потребують видання для підприємства. Однак вони вимагають, щоб ви використовували підказку запиту WITH (NOEXPAND), щоб змусити оптимізатор запитів стандартного видання використовувати індексований вигляд замість базового запиту.
Єремія Пешка

3
У цьому випадку, хоча єдиною точкою зору є застосування єдиного обмеження, і це абсолютно правильний / загальний підхід.
Мартін Сміт

2
Відредаговано, щоб видалити невірну інформацію про необхідне Enterprise Edition.
Мефф

@Meff дякую, що знайшли час для відповіді на коментарі тут - я сподіваюся, що ви не будете стороннім для сайту: вас можуть зацікавити ці питання :)
Джек каже, спробуйте topanswers.xyz
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.