삽입 후 새 ID를 얻습니다
-
03-07-2019 - |
문제
나는 다음과 같이 정의 된 테이블에 새 행을 삽입하고 있습니다.
CREATE TABLE [sometable](
[id] [int] IDENTITY(1,1) NOT NULL,
[someval] sometype NOT NULL
)
다음 삽입물 사용 :
insert into sometable select somefield as someval from othertable
내가 끝났을 때, 나는 새로 삽입 된 모든 행의 ID를 알고 싶습니다. scope_identity () 삽입 된 ID 마지막 행 만 반환합니다.
모든 새로운 ID를 어떻게 얻을 수 있습니까?
마음에 떠오르는 방법 중 하나는 현재 가장 큰 정체성을 불길한 것과 scope_identity () 후 삽입 한 후,이 두 값을 사용하여 약간의 선택에서 선택하는 것입니다. 예를 들어:
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()
더 나은 패턴이 있습니까?
해결책
출력 기능을 사용하여 삽입 된 모든 ID를 테이블에 다시 가져옵니다.
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
다른 팁
ado.net에서 "컨트롤"을 원하고 ID를 자식에 할당하고 ID를 가져 와서 모델을 업데이트 할 수 있도록 ID를 가져옵니다.http://daniel.wertheim.se/2010/10/24/c-batch-identity-inserts/
사용자가 저장된 저장
이것은 동적 기본 키가 될 것입니다 ..
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
프로 시저 생성 sp_bulkinsertcountry (@filepath varchar (1000))는 시작-프로세서-변환 선언 @sql varchar (500) 선언 @id int declare @countryName varchar (30)
-컨트리 제작 테이블 #tmpcountry (CountryName Varchar (30),)
--- 임시 테이블에서 벌크 삽입 실행 @sql = 'Bulk Insert' '' + @filepath + '' 'with (fieldterminator =' ',' ', rowterminator =' ' n' ')'exec. (@SQL)
#TMPCONTRY에서 SELECT [CountryName]에 대한 cursor_country cursor read_only 선언
cursor_country fetch cursor_country에서 @countryName으로 다음 @@countryName으로 가져 오는 동안 @@ fetch_status = 0 시작 @id = isnull (max (countryid), 0) tblcountrymaster set @id = @id+1 tblcountrymaster 값 ( @id, @countryname)에 삽입하십시오. 다음에 Cursor_Country에서 @CountryName 로의 가져 오기 END CLOSE CURSOR_COUNTRY DONGLOCATE CURSOR_COUNTRY END- 프로세서
GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO
자세한 내용은 다음 링크를 방문하십시오http://jalpesh.blogspot.com/search?q=bulk+insert
모든 새 ID를 설정하는 테이블을 만듭니다. 그런 다음 모든 삽입물에 대한 루프를 만듭니다. 루프 내부에서 SCOPE_IDENTITY ()로 원하는 삽입물을 만듭니다. 삽입 후 새 ID를 가져 와서 만든 새 테이블에 삽입하십시오. 결국 [newtable]에서 *를 선택하십시오.