¿En SQL Server es posible obtener la "id" de un registro cuando se ejecuta Insertar?
-
09-06-2019 - |
Pregunta
En SQL Server 2005 tengo un campo "id" en una tabla que tiene la propiedad "Es identidad" establecida en "Sí".Entonces, cuando se ejecuta una inserción en esa tabla, la "id" se establece automáticamente en el siguiente entero incremental.¿Existe una manera fácil, cuando se ejecuta Insertar, de obtener el valor que se configuró en la "id" sin tener que hacer una instrucción Select justo después de Insertar?
duplicado de:
¿La mejor manera de obtener la identidad de la fila insertada?
Solución
Al menos en .Net, puede enviar varias consultas al servidor de una sola vez.Hago esto en mi aplicación:
command.CommandText = "INSERT INTO [Employee] (Name) VALUES (@Name); SELECT SCOPE_IDENTITY()";
int id = (int)command.ExecuteScalar();
Funciona de maravilla.
Otros consejos
Si está insertando varias filas, el uso de la OUTPUT
y INSERTED.columnname
cláusula sobre el insert
La declaración es una forma sencilla de colocar todos los identificadores en una tabla temporal.
DECLARE @MyTableVar table( ID int,
Name varchar(50),
ModifiedDate datetime);
INSERT MyTable
OUTPUT INSERTED.ID, INSERTED.Name, INSERTED.ModifiedDate INTO @MyTableVar
SELECT someName, GetDate() from SomeTable
Scope_identity() es la forma preferida, consulte: 6 formas diferentes de obtener el valor de identidad actual
ALCANCE_IDENTIDAD();es tu mejor apuesta.Y si está utilizando .NET simplemente pase nuestro parámetro y verifique el valor después de ejecutar el procedimiento.
CREATE PROCEDURE [dbo].[InsertProducts]
@id INT = NULL OUT,
@name VARCHAR(150) = NULL,
@desc VARCHAR(250) = NULL
AS
INSERT INTO dbo.Products
(Name,
Description)
VALUES
(@name,
@desc)
SET @id = SCOPE_IDENTITY();
Tienes que seleccionar la función alcance_identidad().
Para hacer esto desde el código de la aplicación, normalmente encapsulo este proceso en un procedimiento almacenado para que aún parezca una consulta a mi aplicación.
Tiendo a preferir adjuntar un disparador a la mesa usando el administrador empresarial.De esa manera, no tendrá que preocuparse por escribir declaraciones SQL adicionales en su código.El mío se parece a esto:
Crear disparador TblName en dbo.tblname para insertar como seleccionar new_id = @@ Identity
Luego, desde dentro de su código, trate sus declaraciones de inserción como declaraciones de selección: simplemente ejecute y evalúe los resultados.la columna "newID" contendrá la identidad de la fila que acaba de crear.
Esta es probablemente la mejor solución que encontré para SQL Server.El servidor SQL devuelve el valor de la columna de identidad después de la declaración de inserción