ultimo scope_identity obtener insertado ident_current ejemplo after sql sql-server insert identity

sql - obtener - scope_identity()



Obtener nuevos ID después de insertar (4)

Estoy insertando un grupo de filas nuevas en una tabla que se define de la siguiente manera:

CREATE TABLE [sometable]( [id] [int] IDENTITY(1,1) NOT NULL, [someval] sometype NOT NULL )

usando la siguiente inserción:

insert into sometable select somefield as someval from othertable

cuando termine, me gustaría saber las identificaciones de todas las filas recién insertadas. SCOPE_IDENTITY () solo devuelve la última fila de identificación insertada.

¿Cómo puedo obtener todas las nuevas identificaciones?

Un método que me viene a la mente sería tomar la identidad más grande actual de alguna tabla y el scope_identity () post-insert, y usar estos dos valores para seleccionar de alguna tabla. Por ejemplo:

declare @currentMaxId int; select @currentMaxId=MAX(id) from sometable insert into sometable select somefield as someval from othertable select * from sometable where id>@currentMaxId and id<=SCOPE_IDENTITY()

¿Hay un mejor patrón?


Use la funcionalidad de SALIDA para tomar todo el ID INSERTADO de nuevo en una tabla.

CREATE TABLE MyTable ( MyPK INT IDENTITY(1,1) NOT NULL, MyColumn NVARCHAR(1000) ) DECLARE @myNewPKTable TABLE (myNewPK INT) INSERT INTO MyTable ( MyColumn ) OUTPUT INSERTED.MyPK INTO @myNewPKTable SELECT sysobjects.name FROM sysobjects SELECT * FROM @myNewPKTable


Usuario este Procuedure almacenado

esta será una clave primaria dinámica ..

SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO

CREATE PROCEDURE sp_BulkInsertCountry ( @FilePath varchar(1000) ) AS BEGIN--PROCEDURE --variable declaration declare @SQL varchar(500) declare @id int declare @CountryName varchar(30)

--Create temporary table for Country CREATE TABLE #tmpCountry ( CountryName varchar(30), )

---executing bulk insert on temporary table SET @SQL=''BULK INSERT #tmpCountry from '''''' + @FilePath + '''''' WITH (FIELDTERMINATOR ='''','''',ROWTERMINATOR=''''/n'''')'' EXEC(@sql)

DECLARE cursor_Country CURSOR READ_ONLY FOR select [CountryName] from #tmpCountry

OPEN cursor_Country FETCH NEXT FROM cursor_Country INTO @CountryName WHILE @@FETCH_STATUS=0 BEGIN SELECT @id=isnull(max(Countryid),0) from tblCountryMaster SET @id=@id+1 INSERT INTO tblCountryMaster values(@Id,@CountryName) FETCH NEXT FROM cursor_Country INTO @CountryName END CLOSE cursor_Country DEALLOCATE cursor_Country END--PROCEDURE

GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO

Para obtener más información, visite el siguiente enlace http://jalpesh.blogspot.com/search?q=bulk+insert



crea una tabla para configurar todas las ID nuevas. luego haz un ciclo para todo el inserto. dentro del ciclo haga la inserción que desee con SCOPE_IDENTITY (). después de la inserción, obtenga la nueva ID e insértela en la nueva tabla que creó. al final, seleccione * de [newTable].