Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Diferentes maneiras de gerar a chave estrangeira primária do tipo int mais recente no código


A única maneira viável para fazer isso é usar INT IDENTITY que o banco de dados SQL Server oferece. Confie em mim - você não quero tentar fazer isso por conta própria!

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

e acabar com isso.

Depois de inserir uma linha em sua primeira tabela, você pode recuperar o valor da coluna de identidade assim:
-- 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, ......)

Atualização: se você precisar inserir várias linhas na primeira tabela e capturar vários ID gerados valores, use o OUTPUT cláusula:
-- 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)

e então vá de lá. Você pode obter quaisquer valores das linhas recém-inseridas na variável de tabela temporária, o que permitirá que você decida quais novos valores de ID usar para quais linhas para sua segunda tabela