«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как я могу предотвратить дублирующие записи базы данных с использованием уникальных ограничений и триггеров?

Как я могу предотвратить дублирующие записи базы данных с использованием уникальных ограничений и триггеров?

Опубликовано в 2025-02-26
Просматривать:836

How Can I Prevent Duplicate Database Records Using Unique Constraints and Triggers?

Используйте уникальные ограничения, чтобы предотвратить дубликаты записей

]]]

В операциях базы данных часто необходимо обеспечить уникальность конкретных комбинаций столбцов. Например, рассмотрим следующую таблицу:

]
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