Fonction d’identification de récupération de valeurs dans SQL SERVER 2000 Dans SQL Server 2000, la colonne identité est définie par IDENTITY, et ce qui suit est lié à l’obtention de la valeur d’identité du dernier enregistrement inséré
Un exemple d’illustration de la fonction de off
Dans SQL Server, vous pouvez utiliser SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() pour obtenir la valeur du dernier enregistrement inséré, et la différence entre eux est : SCOPE_IDENTITY() renvoie la dernière valeur IDENTITY insérée dans la colonne IDENTITY dans le même scope. Un scope est un module – procédures stockées, déclencheurs, fonctions
Des numéros ou des lots. Ainsi, si deux instructions sont dans la même procédure stockée, fonction ou lot, elles sont dans le même champ d’application. @@IDENTITY Retourne la dernière valeur d’identification générée dans toutes les tables de la session en cours IDENT_CURRENT() renvoie la dernière valeur d’identification générée pour la table spécifiée dans toute session et dans n’importe quel champ d’application Voici un exemple pour illustrer leurs différences
-- a) Code exemple -- =========================================== -- Créer une table de test -- =========================================== USE tempdb GO
CREATE TABLE t1(id int IDENTITY,col int) INSÉRER T1 SÉLECTIONNER 1 UNION ALL SELECT 2 CREATE TABLE T2(id int IDENTITY, col int) GO
CRÉER TR_insert_t2 TRIGGER SUR T2 POUR INSERT AS INSÉRER T1 SELECT 3 GO
-- =========================================== -- Tester trois fonctions : 1 -- =========================================== INSÉRER VALEURS T2(1) SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Pour t1]=IDENT_CURRENT(N’t1'), [IDENT_CURRENT() Pour t2]=IDENT_CURRENT(N’t2')
/*--Résultat SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Pour t1 IDENT_CURRENT() Pour t2 ------------------ ------------ -------------------------- ----------------------- 1 3 3 1
(Le nombre de lignes affectées est de 1 ligne) --*/ GO
-- =========================================== -- Tester trois fonctions : 2 -- =========================================== INSÉRER LES VALEURS DE T1(10) SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Pour t1]=IDENT_CURRENT(N’t1'), [IDENT_CURRENT() Pour t2]=IDENT_CURRENT(N’t2')
/*--Résultat SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Pour t1 IDENT_CURRENT() Pour t2 ------------------ ------------ -------------------------- ----------------------- 4 4 4 1
(Le nombre de lignes affectées est de 1 ligne) --*/ GO
-- =========================================== -- Tester trois fonctions : 3 -- ** Ouvre une nouvelle connexion et exécute le code suivant ** -- =========================================== SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Pour t1]=IDENT_CURRENT(N’t1'), [IDENT_CURRENT() Pour t2]=IDENT_CURRENT(N’t2')
/*--Résultat SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Pour t1 IDENT_CURRENT() Pour t2 ------------------ ------------ -------------------------- ----------------------- NULL NULL 4 & n
--=========================================== -- Supprimer l’environnement de test -- =========================================== TABLE DÉBARQUÉE T1,T2
-- b) Description du résultat du code Comme vous pouvez le voir dans le code ci-dessus : IDENT_CURRENT() renvoie toujours la dernière valeur identifiée insérée dans la table spécifiée @@IDENTITY Renvoie la valeur d’identité de la session courante, qu’elle soit dans le même champ ou non, dans les tests 1 et 2, on peut voir qu’elle retourne la valeur d’identité de l’enregistrement inséré dans le déclencheur, et dans
Dans le Test 3, NULL est retourné car il n’y a pas d’enregistrement d’insertion dans la session en cours SCOPE_IDENTITY() renvoie la valeur d’identification du même champ d’application que la session courante, donc dans les tests 1, 2, elle retourne la valeur qui n’est pas affectée par le déclencheur, et dans le test 3, car la session courante n’est pas interpolée
il retourne donc NULL
|