sql >> Database >  >> RDS >> Sqlserver

Verschillende manieren om de nieuwste primaire externe sleutel van het type int in code te genereren

De enige manier om dit te doen, gebruik je INT IDENTITY die de SQL Server-database biedt. Geloof me in deze - jij niet wil je dit zelf proberen!

Gebruik gewoon

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

en klaar ermee.

Nadat u een rij in uw eerste tabel heeft ingevoegd, kunt u de waarde van de identiteitskolom als volgt ophalen:

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

Bijwerken: als u meerdere rijen in de eerste tabel moet invoegen en meerdere gegenereerde ID . moet vastleggen waarden, gebruik de OUTPUT clausule:

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

en ga dan vanaf daar. U kunt alle waarden van de nieuw ingevoegde rijen in de tijdelijke tabelvariabele krijgen, zodat u kunt beslissen welke nieuwe ID-waarden u voor welke rijen voor uw tweede tabel wilt gebruiken



  1. Hoe verwijder je dubbele items in MySQL met een dataset van 20 miljoen rijen?

  2. Fout bij het maken van MySQL-trigger

  3. Bijgewerkte Azure SQL Database Tier-opties

  4. Hoe de waarden voor de laatste en voorlaatste invoer in de tabel te vergelijken?