Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Différentes façons de générer la dernière clé étrangère primaire de type int dans le code

Le seul moyen viable pour ce faire, utilisez INT IDENTITY qu'offre la base de données SQL Server. Faites-moi confiance sur celui-ci - vous ne le faites pas vous voulez essayer de le faire par vous-même !

Utilisez simplement

CREATE TABLE dbo.YourTableOne(ID INT IDENTITY(1,1),  ...other columns...)

et finissons-en.

Une fois que vous avez inséré une ligne dans votre premier tableau, vous pouvez récupérer la valeur de la colonne d'identité comme ceci :

-- do the insert into the first table
INSERT INTO dbo.YourTableOne(Col1, Col2, ...., ColN)
VALUES (Val1, Val2, ...., ValN)

DECLARE @NewID INT

-- get the newly inserted ID for future use
SELECT @NewID = SCOPE_IDENTITY()

-- insert into the second table, use first table's new ID for your FK column
INSERT INTO dbo.YourTableTwo (FKColumn, ......) VALUES(@NewID, ......)

Mise à jour : si vous devez insérer plusieurs lignes dans la première table et capturer plusieurs ID générés valeurs, utilisez le OUTPUT clause :

-- declare a table variable to hold the data
DECLARE @InsertedData TABLE (NewID INT, ...some other columns as needed......)

-- do the insert into the first table
INSERT INTO dbo.YourTableOne(Col1, Col2, ...., ColN)
OUTPUT Inserted.ID, Inserted.Col1, ..., Inserted.ColN INTO @InsertedData(NewID, Col1, ..., ColN)
VALUES (Val1, Val2, ...., ValN)

puis partez de là. Vous pouvez obtenir toutes les valeurs des lignes nouvellement insérées dans la variable de table temporaire, ce qui vous permettra ensuite de décider quelles nouvelles valeurs d'ID utiliser pour quelles lignes de votre deuxième table