[SQL] 삽입 후 새로운 ID를 얻기
SQL삽입 후 새로운 ID를 얻기
나는 다음과 같이 정의 된 테이블에 새로운 행의 무리를 삽입하고 있습니다 :
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를받을 수 있나요?
마음에 스프링 sometable와 SCOPE_IDENTITY () 후 삽입에서 현재 가장 큰 정체성을 잡은 sometable에서 선택이 두 값을 사용하는 것이 한 가지 방법. 예를 들면 :
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()
더 나은 패턴이 있습니까?
해결법
-
==============================
1.모든 테이블에 삽입 된 아이디 다시 잡아 출력 기능을 사용합니다.
모든 테이블에 삽입 된 아이디 다시 잡아 출력 기능을 사용합니다.
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
-
==============================
2.그리고 당신은 ADO.Net에서 "컨트롤"을 원하고 ID를 차일에 할당받을 당신이 모델을 업데이트 할 수 있도록 다시 ID를 얻는 경우 : http://daniel.wertheim.se/2010/10/24/c-batch-identity-inserts/
그리고 당신은 ADO.Net에서 "컨트롤"을 원하고 ID를 차일에 할당받을 당신이 모델을 업데이트 할 수 있도록 다시 ID를 얻는 경우 : http://daniel.wertheim.se/2010/10/24/c-batch-identity-inserts/
-
==============================
3.사용이 저장 프로 시저
사용이 저장 프로 시저
이것은 동적 주키 될 것이다 ..
SET QUOTED_IDENTIFIER ON 가다 SET ANSI_NULLS ON 가다
절차 sp_BulkInsertCountry을 CREATE ( @FilePath의 VARCHAR (1000) ) 같이 BEGIN - 절차를 --variable 선언 선언 @SQL의 VARCHAR (500) @id INT 선언 선언 @CountryName의 VARCHAR (30)
국가 --create 임시 테이블 표 #tmpCountry을 CREATE ( COUNTRYNAME의 VARCHAR (30) )
--- 임시 테이블에 대량 삽입을 실행 SQL @ SET = '에서 BULK INSERT #tmpCountry' ''+ @FilePath + '' 'WITH (FIELDTERMINATOR =' ',' ', ROWTERMINATOR =' '\ n'을 ')' EXEC (@Sql)
cursor_Country 커서 READ_ONLY을위한 선언 #tmpCountry에서 [COUNTRYNAME]를 선택한
OPEN cursor_Country cursor_Country INTO @CountryName로부터 다음을 FETCH @@ FETCH_STATUS = 0 WHILE BEGIN tblCountryMaster로부터 SELECT @ ID = ISNULL (최대 (Countryid), 0) SET @ ID = @ ID + 1 INSERT INTO tblCountryMaster 값 (ID @ @ COUNTRYNAME) cursor_Country INTO @CountryName로부터 다음을 FETCH 종료 CLOSE cursor_Country DEALLOCATE cursor_Country END - 절차
가다 SET QUOTED_IDENTIFIER OFF 가다 SET ANSI_NULLS ON 가다
-
==============================
4.모든 새로운 ID를 설정하는 테이블을 만듭니다. 모든 삽입에 대한 루프를 확인합니다. 루프 내부에 SCOPE_IDENTITY와 당신이 원하는 삽입을 (). 삽입 후 새 ID를 얻을 당신이 만든 새 테이블에 삽입합니다. [newTable]의 단부 * 선택한다.
모든 새로운 ID를 설정하는 테이블을 만듭니다. 모든 삽입에 대한 루프를 확인합니다. 루프 내부에 SCOPE_IDENTITY와 당신이 원하는 삽입을 (). 삽입 후 새 ID를 얻을 당신이 만든 새 테이블에 삽입합니다. [newTable]의 단부 * 선택한다.
from https://stackoverflow.com/questions/810962/getting-new-ids-after-insert by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 쿼리 복잡성 대 성능에 어떤 일반적인 규칙이 있습니까? (0) | 2020.07.22 |
---|---|
[SQL] PostgreSQL의 트림 후행 공백 (0) | 2020.07.22 |
[SQL] 여러 값에 Where 절을 사용하여 SQL 문 (0) | 2020.07.22 |
[SQL] MySQL을 사용 소식 테이블에서 지난 6 개월을 선택하는 방법 (0) | 2020.07.22 |
[SQL] 포스트 그레스에서 5 분 잘라 내기 타임 스탬프 가장 빠른 방법은 무엇입니까? (0) | 2020.07.22 |