sql >> Database teknologi >  >> RDS >> Sqlserver

Forskellige måder at generere den seneste int-type primære fremmednøgle i kode

Den eneste levedygtige måde at gøre dette er at bruge INT IDENTITY som SQL Server-databasen tilbyder. Stol på mig med denne – det gør du ikke ønsker at prøve at gøre dette på egen hånd!

Bare brug

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

og være færdig med det.

Når du har indsat en række i din første tabel, kan du hente værdien af ​​identitetskolonnen på denne måde:

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

Opdatering: hvis du har brug for at indsætte flere rækker i den første tabel og fange flere genererede ID værdier, skal du bruge 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)

og så gå derfra. Du kan få alle værdier fra de nyligt indsatte rækker ind i den midlertidige tabelvariabel, som derefter giver dig mulighed for at bestemme, hvilke nye ID-værdier, der skal bruges til hvilke rækker til din anden tabel



  1. Slet første element i database SQL Query

  2. Simpel Oracle-procedure mislykkedes

  3. Oracle læste fil fra bibliotek med undtagelse

  4. SQL pivot kolonneværdierne