¿En SQL Server es posible obtener la "id" de un registro cuando se ejecuta Insertar?

StackOverflow https://stackoverflow.com/questions/55159

  •  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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top