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

Vue: 12386|Répondre: 0

[Source] SqlServer implémente l’ID de l’enregistrement nouvellement inséré

[Copié le lien]
Publié sur 15/06/2016 11:45:40 | | |

Source : Internet Auteur : Inconnu

- Créer des bases de données et des tables

créer une base de données MyDataBase

utiliser MyDataBase

créer table mytable

id int identity(1,1),

Nom Varchar(20)



--Exécutez ce SQL pour déterminer la valeur de la colonne auto-incrémentale correspondant à l’enregistrement qui vient d’être inséré

insérer dans mytable valeurs ('Li Si')

Sélectionnez @@identity

2. Comparaison des trois méthodes

Dans SQL Server 2000, il existe trois fonctionnalités similaires : SCOPE_IDENTITY, IDENT_CURRENT et @@IDENTITY, qui retournent toutes des valeurs insérées dans la colonne IDENTITY.

IDENT_CURRENT Retourne la dernière valeur d’identification générée pour une table spécifique dans une session et un champ de domination. IDENT_CURRENT Ce n’est pas limité par le périmètre et la session, mais par une table spécifiée. IDENT_CURRENT renvoie la valeur générée pour une table spécifique dans n’importe quelle session et périmètre.

@@IDENTITY Retourne la dernière valeur d’identification générée pour n’importe quelle table dans tous les champs de la session courante.

SCOPE_IDENTITY Retourne la dernière valeur identifiée générée pour la session en cours ainsi que toute table dans le périmètre courant

SCOPE_IDENTITY et @@IDENTITY retournent la dernière valeur d’identification générée dans n’importe quelle table de la session en cours. Cependant, SCOPE_IDENTITY ne retourne que les valeurs insérées dans le champ d’application courant ; @@IDENTITY Pas limité à un champ de vision spécifique.

Par exemple, il existe deux tableaux, T1 et T2, sur lesquels un déclencheur INSERT est défini. Lorsqu’une ligne est insérée dans T1, la gâchette est déclenchée et une rangée est insérée dans T2. Cet exemple illustre deux oscillations : une sur T1 et une sur T2 à la suite du déclenchement.

En supposant que T1 et T2 possèdent toutes deux des colonnes IDENTITY, @@IDENTITY et SCOPE_IDENTITY retourneront des valeurs différentes à la fin de l’instruction INSERT sur T1.

@@IDENTITY Retourne la dernière valeur de colonne IDENTITY insérée dans n’importe quel scope de la session courante, qui est la valeur insérée dans T2.

SCOPE_IDENTITY() retourne la valeur IDENTITY insérée dans T1, qui est le dernier INSERT apparu dans le même scope. Si la fonction SCOPE_IDENTITY() est appelée avant que l’instruction d’insertion dans la colonne d’identité ne se produise dans le champ d’application, la fonction renvoie une valeur NULL.

Les valeurs retournées par IDENT_CURRENT('T1') et IDENT_CURRENT('T2') sont respectivement les dernières valeurs auto-incrémentales des deux tables.

Expérience d’AJQC : (40 threads locaux, 40+40 threads distants simultanément testés simultanément, insertion de lignes de 1200 W), la conclusion est la suivante :

1. Dans les applications typiques en cascade. @@IDENTITY ne peut pas être utilisé, et des conflits simultanés surviennent lorsque 1W est en multi-rangs sur des machines CII850 et 256M SD. Sur P42.8C et 512M DDR, il y a un conflit simultané alors qu’il n’y a que plus de 6000 lignes.

2.SCOPE_IDENTITY() est absolument fiable et peut être utilisé dans le processus de stockage, même les déclencheurs n’ont pas besoin d’être construits, et il n’y a pas de conflits simultanés

SELECT IDENT_CURRENT('TableName') - Renvoie la dernière valeur d’étiquette générée dans la table spécifiée

SELECT IDENT_INCR('TableName') - renvoie la valeur d’incrément marquée du champ pour la table spécifiée

SELECT IDENT_SEED('TableName') - renvoie la valeur de graine de champ marquée de la table spécifiée

Retourne le numéro automatique du dernier enregistrement inséré

SELECT IDENT_CURRENT('NomDeTable')

Retour au numéro automatique suivant :

SELECT IDENT_CURRENT('TableName')+(SELECT IDENT_INCR('TableName'))

SELECT @@IDENTITY - Retourne la dernière valeur marquée générée dans toutes les tables de la session en cours








Précédent:SQLServer implémente la méthode universelle de division des chaînes
Prochain:Partagez un artefact de recherche utile
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