| Citation : 
 
 
Référence de Transact-SQL
 
 
 SCOPE_IDENTITY
 Renvoie la dernière valeur IDENTITY insérée dans une colonne IDENTITY dans la même étendue. Une étendue est un module, tel qu'une procédure stockée, un déclencheur, une fonction ou un lot. Ainsi, deux instructions sont dans la même étendue s'ils se trouvent dans la même procédure stockée ou fonction, ou dans le même lot.
 
 Syntaxe
 SCOPE_IDENTITY( )
 
 Type des valeurs renvoyées
 sql_variant
 
 Notes
 SCOPE_IDENTITY, IDENT_CURRENT et @@IDENTITY sont des fonctions similaires dans la mesure où elles renvoient les valeurs insérées dans les colonnes IDENTITY.
 
 IDENT_CURRENT n'est pas limitée au niveau de l'étendue et la session, car elle est restreinte à une table spécifiée. IDENT_CURRENT renvoie la valeur générée pour une table spécifique dans n'importe quelles session et étendue. Pour plus d'informations, voir IDENT_CURRENT.
 
 SCOPE_IDENTITY et @@IDENTITY renvoient les dernières valeurs d'identité générées dans une table de la session en cours. Toutefois, SCOPE_IDENTITY renvoie les valeurs insérées uniquement dans l'étendue actuelle. @@IDENTITY n'est pas restreinte à une étendue spécifique.
 
 Par exemple, vous disposez de deux tables (T1 et T2) et d'un déclencheur INSERT défini dans T1. Lorsqu'une ligne est insérée dans T1, le déclencheur s'active et insère une ligne dans T2. Ce scénario illustre deux étendues : insertion dans T1 et insertion dans T2 (action résultante du déclencheur).
 
 Supposons que T1 et T2 incluent des colonnes IDENTITY : @@IDENTITY et SCOPE_IDENTITY renvoient des valeurs différentes à la fin d'une instruction INSERT dans T1.
 
 @@IDENTITY renvoie la dernière valeur de la colonne IDENTITY insérée dans toute étendue au cours de la session actuelle, ce qui correspond à la valeur insérée dans T2.
 
 SCOPE_IDENTITY() renvoie la valeur IDENTITY insérée dans T1, ce qui correspond à la dernière instruction INSERT exécutée dans la même étendue. La fonction SCOPE_IDENTITY() renvoie la valeur NULL si la fonction est invoquée avant que toute instruction INSERT dans une colonne d'identité ne soit exécutée dans l'étendue.
 
 Les exemples suivants illustrent ce scénario.
 
 Exemple
 L'exemple suivant crée deux tables, TZ et TY, et place un déclencheur INSERT dans TZ. Lorsqu'une ligne est insérée dans la table TZ, le déclencheur (Ztrig) s'active et insère une ligne dans TY.
 
 USE tempdb
 GO
 CREATE TABLE TZ (
 Z_id  int IDENTITY(1,1)PRIMARY KEY,
 Z_name varchar(20) NOT NULL)
 
 INSERT TZ
 VALUES ('Lisa')
 INSERT TZ
 VALUES ('Mike')
 INSERT TZ
 VALUES ('Carla')
 
 SELECT * FROM TZ
 
 --Result set: This is how table TZ looks
 Z_id   Z_name
 -------------
 1      Lisa
 2      Mike
 3      Carla
 
 CREATE TABLE TY (
 Y_id  int IDENTITY(100,5)PRIMARY KEY,
 Y_name varchar(20) NULL)
 
 INSERT TY (Y_name)
 VALUES ('boathouse')
 INSERT TY (Y_name)
 VALUES ('rocks')
 INSERT TY (Y_name)
 VALUES ('elevator')
 
 SELECT * FROM TY
 --Result set: This is how TY looks:
 Y_id  Y_name
 ---------------
 100   boathouse
 105   rocks
 110   elevator
 
 /*Create the trigger that inserts a row in table TY
 when a row is inserted in table TZ*/
 CREATE TRIGGER Ztrig
 ON TZ
 FOR INSERT AS
 BEGIN
 INSERT TY VALUES ('')
 END
 
 /*FIRE the trigger and find out what identity values you get
 with the @@IDENTITY and SCOPE_IDENTITY functions*/
 INSERT TZ VALUES ('Rosalie')
 
 SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]
 GO
 SELECT   @@IDENTITY AS [@@IDENTITY]
 GO
 
 --Here is the result set.
 SCOPE_IDENTITY
 4
 /*SCOPE_IDENTITY returned the last identity value in the same scope, which was the insert on table TZ*/
 
 @@IDENTITY
 115
 /*@@IDENTITY returned the last identity value inserted to TY by the trigger, which fired due to an earlier insert on TZ*/
 
 
 Voir aussi
 
 @@IDENTITY
 
 ©1988-2000 Microsoft Corporation. Tous droits réservés.
 
 
 |