separado - En SQL Server, ¿es posible obtener "id" de un registro cuando se ejecuta Insertar?
separar un registro en sql (7)
En SQL Server 2005 tengo un campo "id" en una tabla que tiene la propiedad "Is Identity" establecida en "Sí". Por lo tanto, cuando se ejecuta una inserción en esa tabla, el "id" se establece automáticamente en el siguiente entero creciente. ¿Hay una manera fácil cuando se ejecuta el Insertar para obtener lo que se estableció el "id" sin tener que hacer una instrucción Seleccionar justo después del Insertar?
duplicado de:
¿La mejor forma de obtener la identidad de la fila insertada?
Debe seleccionar la función scope_identity ().
Para hacer esto desde el código de la aplicación, normalmente encapsulado este proceso en un procedimiento almacenado por lo que todavía parece una consulta a mi aplicación.
En .Net al menos, puede enviar múltiples consultas al servidor de una vez. Lo hago en mi aplicación:
command.CommandText = "INSERT INTO [Employee] (Name) VALUES (@Name); SELECT SCOPE_IDENTITY()";
int id = (int)command.ExecuteScalar();
Funciona de maravilla.
SCOPE_IDENTITY (); es tu mejor apuesta. Y si está usando .NET simplemente pase un parámetro nuestro 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();
Scope_identity () es la forma preferida, consulte: 6 formas diferentes de obtener el valor de identidad actual
Tiendo a preferir adjuntar un disparador a la mesa usando el administrador de la empresa. De esta forma, no tendrá que preocuparse por escribir enunciados SQL adicionales en su código. El mío se ve algo como esto:
Crear Trigger tblName en dbo.tblName para Insertar As seleccionar new_id = @@ IDENTIDAD
Luego, desde dentro de su código, trate sus declaraciones de inserción como declaraciones seleccionadas: simplemente ejecute y evalúe los resultados. la columna "newID" contendrá la identidad de la fila que acaba de crear.
Si está insertando varias filas, el uso de la cláusula OUTPUT
e INSERTED.columnname
en la instrucción de insert
es una forma simple de obtener 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
Esta es probablemente la mejor solución de trabajo que encontré para SQL Server. Servidor SQL devuelve el valor de la columna de identidad después de insertar la declaración