[SQL] 어떻게 여러 레코드를 삽입하고 ID 값을 얻을 수 있습니까?
SQL어떻게 여러 레코드를 삽입하고 ID 값을 얻을 수 있습니까?
나는 커서를하고 밖으로 테이블 A 레코드 및 업데이트 표 B 레코드의 ID 값을 얻을 수있는 방법이 있나요 다른 테이블 B.에서 테이블 A에 여러 레코드를 삽입하는거야?
Create Table A
(id int identity,
Fname nvarchar(50),
Lname nvarchar(50))
Create Table B
(Fname nvarchar(50),
Lname nvarchar(50),
NewId int)
Insert into A(fname, lname)
SELECT fname, lname
FROM B
나는 MS SQL 서버 2005을 사용하고 있습니다.
해결법
-
==============================
1.MBelly 바로 돈이다 - 그러나 트리거는 항상 시도하고이 필요한 아닌 경우에도 업데이트 테이블 B 것이다 (당신은 또한 테이블 C에서 삽입하고 있기 때문에?).
MBelly 바로 돈이다 - 그러나 트리거는 항상 시도하고이 필요한 아닌 경우에도 업데이트 테이블 B 것이다 (당신은 또한 테이블 C에서 삽입하고 있기 때문에?).
대런은 여러 정체성이 결과 집합으로 다시 얻을 수없는, 여기 또한 정확합니다. 옵션은 커서를 사용하여 삽입 각 행에 대해 신원을 복용, 또는 전후의 ID를 저장 대런의 접근 방식을 사용하고 있습니다. 그래서 당신이 신원의 증가를 알고이 너무 오래 확실 테이블이 세 가지 이벤트에 대해 고정되어 있는지 확인로 작동합니다.
그것은 나를, 그리고 그것이 아니었다 경우 중요한 나는 커서로 가고 싶어.
-
==============================
2.2005 년부터 출력 절을 사용 :
2005 년부터 출력 절을 사용 :
DECLARE @output TABLE (id int) Insert into A (fname, lname) OUTPUT inserted.ID INTO @output SELECT fname, lname FROM B select * from @output
이제 테이블 변수는 삽입 모든 행의 ID 값을 가지고있다.
-
==============================
3.신중하게 질문을 읽고, 당신은 단지 테이블 A의 새 ID 값을 기반으로 업데이트 테이블 B에 원하는
신중하게 질문을 읽고, 당신은 단지 테이블 A의 새 ID 값을 기반으로 업데이트 테이블 B에 원하는
삽입이 완료되면, 그냥 업데이트를 실행 ...
UPDATE B SET NewID = A.ID FROM B INNER JOIN A ON (B.FName = A.Fname AND B.LName = A.LName)
이것은 FNAME / LNAME 조합 키와 일치하도록 테이블 간의 기록을 사용할 수 있다고 가정합니다. 그렇지 않은 경우, 당신은 기록이 정확하게 일치 보장하기 위해 여분의 필드를 추가해야 할 수도 있습니다.
당신은 당신이 테이블 B의 레코드가 서로 구별 할 수 없기 때문에이 전혀 이해가되지 않습니다 다음 기록과 일치 할 수있는 대체 키가없는 경우.
-
==============================
4.지금까지 내가 그것을 이해 당신이 겪고있는 문제는 정체성 열이 표 A,에 삽입 할 것입니다, 당신은하지 않습니다 표 B의 정체성을 유지하려는.
지금까지 내가 그것을 이해 당신이 겪고있는 문제는 정체성 열이 표 A,에 삽입 할 것입니다, 당신은하지 않습니다 표 B의 정체성을 유지하려는.
그냥이 당신이 당신의 ID가 삽입에 그리고이 충돌하지 않는 한, 당신은 괜찮을 정의 할 수 있습니다 테이블 A에 신원 삽입 설정해야한다 그렇게하기 위해서. 그럼 당신은 할 수 있습니다 :
Insert into A(identity, fname, lname) SELECT newid, fname, lname FROM B
DB를 사용하고 있습니까하지만 SQL 서버의 명령은 신원 삽입 될 켜 확실하지 무엇을 :
set identity_insert A on
-
==============================
5.당신은 항상이 동작을 원한다면, 당신은 테이블 B를 업데이트 할 것이다 테이블에 AFTER 삽입 트리거를 둘 수 있었다
당신은 항상이 동작을 원한다면, 당신은 테이블 B를 업데이트 할 것이다 테이블에 AFTER 삽입 트리거를 둘 수 있었다
-
==============================
6.당신은 행 번호에 가입하여 얻을 수 있습니다. 그것이 신분이기 때문에 당신이 당신이 그들을 선택하는 순서에있을 것입니다 항목을 추가 할 때, 그냥 증가 때문이 가능합니다.
당신은 행 번호에 가입하여 얻을 수 있습니다. 그것이 신분이기 때문에 당신이 당신이 그들을 선택하는 순서에있을 것입니다 항목을 추가 할 때, 그냥 증가 때문이 가능합니다.
-
==============================
7.나는 고유 식별자 타입 대신 ID를 사용하는 것이 좋습니다. 나는 당신이 삽입 전에 ID를 생성 할 수 있습니다이 경우는 :
나는 고유 식별자 타입 대신 ID를 사용하는 것이 좋습니다. 나는 당신이 삽입 전에 ID를 생성 할 수 있습니다이 경우는 :
update B set NewID = NEWID() insert into A(fname,lname,id) select fname,lname,NewID from B
from https://stackoverflow.com/questions/95988/how-to-insert-multiple-records-and-get-the-identity-value by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] sp_reset_connection은 무엇입니까? (0) | 2020.04.14 |
---|---|
[SQL] 나는 임시 테이블이없는 MySQL의 테이블의 모든 중복 레코드를 삭제하려면 어떻게 (0) | 2020.04.14 |
[SQL] MySQL은 비교 날짜 (0) | 2020.04.14 |
[SQL] SQLite는 무작위 행 (들)을 선택 (0) | 2020.04.14 |
[SQL] 여러 열에서 최소 값을 선택하는 가장 좋은 방법은 무엇입니까? (0) | 2020.04.14 |