J'ai une table qui a 4 champs.Sql Server Triggers
Col1 Guid Primary-Key (FK to another table)
Col2 Guid Primary-Key (FK to another table)
Col3 Int Primary-Key
Col4 Int
Maintenant, je veux faire: quand un nouvel enregistrement inséré par l'utilisateur qui ont même valeur comme un enregistrement existe avant sur la table comme ci-dessous:
Il y avait ce dossier:
X Y Z 2
Nouveau record
X Y Z 3
mise à jour enregistrement existant au-dessous:
X Y Z 5
et également d'empêcher l'insertion d'un enregistrement en double. J'ai écrit un déclencheur très basique. Aidez-moi maintenant à compléter ceci. Merci d'avance. ;)
CREATE TRIGGER [Tbl].[TriggerName]
ON [dbo].[Tbl]
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE [dbo].[Tbl]
SET [dbo].[Tbl].[Col4] += [Inserted].[Col4]
From [dbo].[Tbl] INNER JOIN [Inserted] ON [dbo].[Tbl].[Col1] = [Inserted].[Col1] AND
[dbo].[Tbl].[Col2] = [Inserted].[Col2]
WHERE [dbo].[Tbl].[Col3] = [Inserted].[Col3];
//How to prevent from inserting duplicate record?
END
Si votre clé primaire est '(col1, col2, col3)', l'utilisateur ne pourra jamais insérer 'X Y Z 3' quand' X Y Z 2' existe déjà. Cela violerait votre clé primaire. –
@Joe Oui, vous avez raison, avant de faire cela j'ai créé ces clés primaires pour éviter de dupliquer, mais maintenant je veux mettre à jour l'enregistrement qui existe dans la table, donc après avoir résolu ce problème, je vais supprimer les clés primaires ou étendre à quatre cols;) – Sadegh
@Sadegh: Pourquoi essayez-vous de mettre cela dans un déclencheur du tout? Pourquoi ne pouvez-vous pas tester l'existence dans votre code et mettre à jour/insérer le cas échéant à ce moment-là. –