문제

나는 다음과 같이 정의 된 테이블에 새 행을 삽입하고 있습니다.

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]에서 *를 선택하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top