Je vais insert des données dans une table comme ceci:
Insert Into MyTable (Field1, Field2) Values ('test', 5)
Lorsque cette insertion se produit, la nouvelle ligne va avoir une valeur d'identification dans la colonne ID
. Si j'ai une variable appelée @ID
dans mon code T-SQL, comment puis-je renseigner @ID
avec le résultat de l'insertion T-SQL?
Declare @ID int Insert into MyTable (Field1, Field2) Values ('test', 5) --//How do I populate @ID with the value of ID of the record that was just inserted?
Il y a deux façons – la première est d'utiliser SCOPE_IDENTITY :
DECLARE @ID INT INSERT INTO MyTable (Field1, Field2) VALUES ('test', 5) SELECT @ID = SCOPE_IDENTITY()
N'utilisez pas @@ IDENTITY – la valeur qu'il contient correspond à la dernière colonne IDENTITY mise à jour sans tenir count de la scope. Ce qui signifie, qu'il n'est pas fiable qu'il contient la valeur pour votre INSERT, mais SCOPE_IDENTITY fait.
L'autre alternative consiste à utiliser la clause OUTPUT (SQL Server 2005+).
SELECT @ID = SCOPE_IDENTITY();
Vous devriez utiliser scope_identity dans votre cas.
Il y a différentes façons d'get la dernière identité insérée et ils diffèrent dans la façon dont ils fonctionnent juste pour vos informations les listant –
@@IDENTITÉ
SCOPE_IDENTITY ()
IDENT_CURRENT
CLAUSE DE SORTIE (est venu à savoir à partir de @OMG Ponies réponse)
Considérez les différences et les comparaisons entre eux avant de décider lequel utiliser.