Используйте уникальные ограничения, чтобы предотвратить дубликаты записей
]]]В операциях базы данных часто необходимо обеспечить уникальность конкретных комбинаций столбцов. Например, рассмотрим следующую таблицу:
]ID | Name | Active | PersonNumber
добавить уникальные ограничения в существующие таблицы
]]] Чтобы добавить уникальное ограничение в существующую таблицу, вы можете использовать один из следующих методов:
1.
alter table dbo.yourtablename Добавить ограничение uq_yourtablename уникально (Column1, Column2); ]
ALTER TABLE dbo.yourtablename
ADD CONSTRAINT uq_yourtablename UNIQUE(column1, column2);
используйте триггеры, чтобы предотвратить повторную вставку
CREATE UNIQUE INDEX uq_yourtablename
ON dbo.yourtablename(column1, column2);
создать триггер dbo.blockduplicatesyourtable На dbo.yourtable Вместо вставки КАК НАЧИНАТЬ Установить nocount на; Если нет ( Выберите 1 От вставки как я Внутренний присоединяйтесь к dbo.yourtable как t На i.column1 = t.column1 И i.column2 = t.column2 ) НАЧИНАТЬ Вставьте dbo.yourtable (Column1, Column2, ...) Выберите Column1, Column2, ... из вставки; КОНЕЦ ЕЩЕ НАЧИНАТЬ Печать 'не было выполнено. '; КОНЕЦ КОНЕЦ; ИДТИ
пример: реализовать уникальность для Personnumber и Active
CREATE TRIGGER dbo.BlockDuplicatesYourTable
ON dbo.YourTable
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
IF NOT EXISTS (
SELECT 1
FROM inserted AS i
INNER JOIN dbo.YourTable AS t
ON i.column1 = t.column1
AND i.column2 = t.column2
)
BEGIN
INSERT dbo.YourTable(column1, column2, ...)
SELECT column1, column2, ... FROM inserted;
END
ELSE
BEGIN
PRINT '未执行任何操作。'; -- 更友好的提示信息
END
END;
GO
используйте tempdb; ИДТИ Создать таблицу dbo.person ( ID Int Identity (1,1) Первичный ключ, Название Нварчар (32), Активный бит, Personnumber Int ); ИДТИ Alter Table dbo.person Добавить ограничение uq_person уникально (Personnumber, Active); ИДТИ
теперь любая попытка вставки, которая нарушает уникальное ограничение, потерпит неудачу с сообщением об ошибке, гарантируя, что не будет повторяющейся записи с тем же человеком и активными состояниями.print 'Не было выполнено действие. Оператор '
заменяет print' ничего не сделал. ]
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3