2011-06-01 6 views
0

J'ai créé des déclencheurs pour INSERT et UPDATE séparément. Le déclencheur va insérer une ligne dans Schema2 quand une insertion est faite dans Schema1. Tables:Déclencheurs dans SQL Server 2008

  • Schema1.Temp1
  • Schema2.Temp2

La création de déclenchement est réussie.


Mais quand je l'insertion de données dans Temp1, il me donne une erreur pour Temp2 - clé en double. Temp2 a des contraintes pour deux autres tables. Qu'est-ce qui peut causer cela et comment peut-il être résolu? Lorsque votre déclencheur est appelé, essayez d'écrire sur la Table2 (comme vous l'avez dit)

+1

Je ne pense pas que ce problème ait quelque chose à voir avec les déclencheurs. Vous insérez simplement des valeurs en double. L'erreur montre quelle contrainte est violée. –

+1

Veuillez mettre à jour avec l'instruction 'CREATE TABLE' pour' Temp2'. Arrêter les données en double est une bonne chose (tm) - on dirait que vous mettez en place une réplication "pauvre", quand il y a de meilleures alternatives en fonction de ce que vous voulez vraiment que ces déclencheurs fassent. –

+0

Pouvez-vous ** nous montrer ** la structure de Table2 (colonnes, leurs types de données, quels index vous avez sur la table) et l'instruction que votre trigger utilise pour insérer les données, et le message d'erreur ** complete and exact ** vous obtenez ?? –

Répondre

0

Peraphs vous n'avez pas écrit requête INSERT en utilisant une condition sur l'existence de votre ligne Temp1 dans Temp2.

Votre requête doit être de ce type:

INSERT INTO Table2 (field list) 
SELECT field list 
FROM inserted 
WHERE NOT EXISTS(SELECT 'key' in Table2 t2 where t2.id = inserted.field_of_key) 

De cette façon, vous empêchez clé en double, donc si vous souhaitez mettre à jour votre table2 à insérer aussi, vous pouvez écrire un stament UPDATE lorsque cette clé est déjà existant.

Dites-moi si c'est OK