2010-10-03 5 views
0

Quelqu'un peut-il me dire comment mettre à jour une colonne d'un enregistrement lorsqu'il est inséré dans la base de données. Voici le pseudo-code que je veux.Déclencheur simple dans SQL Server 2008

if(mytable.OriginalId == null) 
    mytable.OriginalId = Scope_Identity(); 
+0

http://msdn.microsoft.com/en-us/library /ms189799.aspx –

+0

Il y a un problème ici: AFAIK vous ne pouvez récupérer l'identité générée sur un déclencheur AFTER UDPATE - de sorte que vous devrez exécuter une autre mise à jour sur la table pour changer 'OriginalId' ... C'est faisable, mais je le ferais ne conseille pas ça. Je recommanderais une troisième colonne calculée dans ce cas, avec l'expression 'COALESCE (OriginalID, ID)'. Plus simple, aucun déclencheur requis, et il vous donnerait le résultat attendu. – rsenna

Répondre

1

Ce serait contradictoire je pense. Soit OriginalId est défini ou il n'est pas sur insert.

Si ce n'est pas d'où vient Scope_Identity()? Si cela provient d'une autre colonne, ne vaut-il pas mieux utiliser une colonne calculée?

Désolé, il est pas clair ce que l'objectif global est ... vous n'utilisez normalement un déclencheur surtout si OriginalId fait partie du PK

+0

Désolé, j'aurais dû le mentionner. Le PK est une autre colonne appelée "Id". – mrtaikandi

+0

Merci. Et OriginalId devrait-il toujours être identique à ID? ou différent? – gbn

+0

Si l'utilisateur le définit sur NULL, il devrait être identique à ID, sinon il devrait être ce que l'utilisateur veut. – mrtaikandi