sql >> Databasteknik >  >> RDS >> Sqlserver

Utlösare för att förhindra infogning för dubbletter av data i två kolumner

Något så här:

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

Det är bara för att infoga, du kanske vill överväga uppdateringar också.

Uppdatera

Ett enklare sätt skulle vara att bara skapa en unik begränsning på bordet, detta kommer också att genomdriva den för uppdateringar också och ta bort behovet av en utlösare. Gör bara:

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

och då är du i affärer.



  1. Oracle SQL pivotfråga

  2. MySQL:Large VARCHAR vs. TEXT?

  3. CURRENT_TIME Exempel – MySQL

  4. skript för att konvertera mysql dump sql-fil till format som kan importeras till sqlite3 db