sql >> Base de Datos >  >> RDS >> Sqlserver

Diferentes formas de generar la última clave externa primaria de tipo int en el código

La única forma viable hacer esto es usar INT IDENTITY que ofrece la base de datos de SQL Server. Confía en mí en esto:tú no ¡quieres intentar hacer esto por tu cuenta!

Solo usa

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

y listo.

Una vez que inserta una fila en su primera tabla, puede recuperar el valor de la columna de identidad de esta manera:

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

Actualización: si necesita insertar varias filas en la primera tabla y capturar varias ID generadas valores, utilice la 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)

y luego ir desde allí. Puede obtener cualquier valor de las filas recién insertadas en la variable de la tabla temporal, lo que le permitirá decidir qué nuevos valores de ID usar para qué filas de su segunda tabla