sql >> Databasteknik >  >> RDS >> Sqlserver

Olika sätt att generera den senaste primära främmande nyckeln av int-typ i kod

Det enda gångbara sättet att göra detta är att använda INT IDENTITY som SQL Server-databasen erbjuder. Lita på mig om det här - du gör det inte vill försöka göra detta på egen hand!

Använd bara

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

och vara färdig med det.

När du har infogat en rad i din första tabell kan du hämta värdet för identitetskolumnen så här:

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

Uppdatering: om du behöver infoga flera rader i den första tabellen och fånga flera genererade ID värden, använd OUTPUT klausul:

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

och sedan gå därifrån. Du kan hämta vilka värden som helst från de nyligen infogade raderna i den temporära tabellvariabeln, som sedan låter dig bestämma vilka nya ID-värden som ska användas för vilka rader för din andra tabell



  1. Hur ansluter jag till en MySQL-databas från Clojure?

  2. 5 snabba användbara tips för SQL Server Production DBA:er

  3. classNotFound Undantag vid användning av JDBC för MYSQL på Tomcat i eclipse

  4. PostgreSQL:Hitta behörighet för element, gå upp till root