SQL Server: déclencher comment lire la valeur pour insérer, mettre à jour, supprimer
J'ai la gâchette dans un tableau et que vous souhaitez lire UserId
valeur lorsqu'une ligne est insérée, mis à jour ou supprimés. Comment faire? Le code ci-dessous ne fonctionne pas, j'obtiens l'erreur sur UPDATED
ALTER TRIGGER [dbo].[UpdateUserCreditsLeft]
ON [dbo].[Order]
AFTER INSERT,UPDATE,DELETE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE
@UserId INT,
SELECT @UserId = INSERTED.UserId FROM INSERTED, DELETED
UPDATE dbo.[User] SET CreditsLeft = CreditsLeft - 1 WHERE Id = @UserId
END
source d'informationauteur Tomas | 2011-12-14
Vous devez vous connecter pour publier un commentaire.
Veuillez noter que
inserted, deleted
signifie la même chose queinserted CROSS JOIN deleted
et donne à chaque combinaison de chaque ligne. Je doute que cela soit ce que vous voulez.Quelque chose comme cela pourrait vous aider à démarrer...
En fonction de ce que vous voulez faire, vous font référence à la table qui vous intéresse avec
inserted.userID
oudeleted.userID
etc.Enfin, sachez que
inserted
etdeleted
sont tables et peuvent (et le font) contiennent plus d'un enregistrement.Si vous insérez 10 dossiers à la fois, la
inserted
table contient TOUS les 10 enregistrements. La même chose s'applique aux suppressions et lesdeleted
table. Et les deux tables dans le cas d'une mise à jour.MODIFIER Exemple Déclencher après OPs modifier.
Si PrimaryKey de
UpdateUserCreditsLeft
est autre chose que le nom d'utilisateur, utilisez-la dans la JOINTURE EXTERNE COMPLÈTE à la place.Il n'y a pas de
updated
tableau dynamique. Il y a justeinserted
etdeleted
. Sur unUPDATE
de commande, les anciennes données sont stockées dans ledeleted
dynamique de la table, et les nouvelles valeurs sont stockées dans leinserted
tableau dynamique.Penser à un
UPDATE
comme unDELETE/INSERT
combinaison.Voici la syntaxe pour créer un déclencheur:
Si vous voulez utiliser Sur la mise à Jour vous ne pouvez le faire avec le
IF UPDATE ( column )
section. Ce n'est pas possible de faire ce que vous demandez.