separar separado registro por ejemplo dividir delimitada consulta comas columnas campo cadena sql-server identity

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();



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