Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Verschiedene Möglichkeiten zum Generieren des neuesten primären Fremdschlüssels vom Typ int im Code

Der einzig praktikable Weg Dazu verwenden Sie INT IDENTITY die die SQL Server-Datenbank bietet. Vertrauen Sie mir in diesem Fall - Sie tun es nicht Willst du es selbst versuchen!

Verwenden Sie einfach

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

und fertig.

Sobald Sie eine Zeile in Ihre erste Tabelle eingefügt haben, können Sie den Wert der Identitätsspalte wie folgt abrufen:

-- 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, ......)

Aktualisierung: wenn Sie mehrere Zeilen in die erste Tabelle einfügen und mehrere generierte ID erfassen müssen verwenden Sie die OUTPUT Klausel:

-- 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)

und dann von dort gehen. Sie können beliebige Werte aus den neu eingefügten Zeilen in die temporäre Tabellenvariable übernehmen, wodurch Sie dann entscheiden können, welche neuen ID-Werte für welche Zeilen Ihrer zweiten Tabelle verwendet werden sollen