SQL Server comprendre SCOPE_IDENTITY()
J'ai ce bout de code dans une procédure stockée:
BEGIN
SET @UserId = NULL;
IF (@Username IS NOT NULL)
BEGIN
EXECUTE SP_ADD_USER @Username, @UserId OUTPUT;
END
EXECUTE SP_ADD_ALERT @Name, @AlertType, @AlertId OUTPUT;
INSERT INTO AlertLogs (Datastamp, AlertID, UserID, NotificationMessage)
VALUES (@Datastamp, @AlertId, @UserId, @EmailMessage);
SET @AlertLogId = SCOPE_IDENTITY();
END
@AlertLogId
est un paramètre de sortie que je veux être assigné à la suite de la dernière insertion dans AlertLogs
table. Dois-je inclure
INSERT INTO AlertLogs (Datastamp, AlertID, UserID, NotificationMessage)
VALUES (@Datastamp, @AlertId, @UserId, @EmailMessage);
dans un nouveau bloc (un nouveau début/fin d'étendue) pour SCOPE_IDENTITY()
de travailler correctement ?
(et pas de rapport, par exemple le dernier l'ID d'un enregistrement inséré fait dans SP_ADD_ALERT
par exemple ?)
Vous devez vous connecter pour publier un commentaire.
Dans votre requête,
SCOPE_IDENTITY()
va retourner la dernière saisie de l'identité de la valeur dans la base de données pour ce champ d'application.Dans ce cas, il sera l'identité de l'
AlertLogs
table, si cela a une identité.http://msdn.microsoft.com/en-us/library/ms190315.aspx
SCOPE_IDENTITY
dans une fonction que vous ne pouvez pasINSERT
ouEXEC
SCOPE_IDENTITY()
appel (autre que celle qui est également placé à l'intérieur du corps de la gâchette).INSERT
,UPDATE
ouDELETE
. UDF ne peut invoquer l'une de ces commandes.Vous pouvez également utiliser un SORTIE de la clause dans votre instruction insert. Cela signifie que vous n'avez pas besoin de s'inquiéter au sujet de la portée et de vous en faire d'autres (non-identité) les informations disponibles à partir de la table inserted.
Considérer cette table simple:
Avec ce défaut a ajouté:
Vous pouvez obtenir des valeurs pour la valeur par défaut et de l'identité à partir de l'opération d'insertion.
Ici, j'ai juste tiré les valeurs de la variable de table et les imprimer.