Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 11405|Répondre: 0

[Pourboires] sql obtient la valeur de la clé primaire après avoir attendu INSERT

[Copié le lien]
Publié sur 05/05/2015 17:35:51 | | |

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





Précédent:Pourquoi tout le monde est-il allé à la fête du 1er mai ?
Prochain:Quelle est la différence entre SCOPE_IDENTITY() écrit avant et après dans t-sql ?
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com