Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Задействане за предотвратяване на вмъкване за дублиращи се данни от две колони

Нещо като това:

CREATE TRIGGER MyTrigger ON dbo.MyTable
AFTER INSERT
AS

if exists ( select * from table t 
    inner join inserted i on i.name=t.name and i.date=t.date and i.id <> t.id)
begin
    rollback
    RAISERROR ('Duplicate Data', 16, 1);
end
go

Това е само за вмъкване, може да искате да помислите и за актуализации.

Актуализиране

По-прост начин би бил просто да създадете уникално ограничение в таблицата, това също ще го наложи за актуализации и ще премахне необходимостта от задействане. Просто направете:

ALTER TABLE [dbo].[TableName]    
ADD CONSTRAINT [UQ_ID_Name_Date] UNIQUE NONCLUSTERED
(
    [Name], [Date]
)

и тогава ще бъдете в бизнеса.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо UDF е толкова по-бавен от подзаявката?

  2. Създайте UDF, обвързан със схема в SQL Server

  3. Преобразувайте „datetimeoffset“ в „datetime“ в SQL Server (T-SQL примери)

  4. Архивиране/възстановяване на SQL Server срещу отделяне/прикачване

  5. SQL Server SP - Предаване на параметър за IN масив списък?