복붙노트

[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. ==============================

    1.MBelly 바로 돈이다 - 그러나 트리거는 항상 시도하고이 필요한 아닌 경우에도 업데이트 테이블 B 것이다 (당신은 또한 테이블 C에서 삽입하고 있기 때문에?).

    MBelly 바로 돈이다 - 그러나 트리거는 항상 시도하고이 필요한 아닌 경우에도 업데이트 테이블 B 것이다 (당신은 또한 테이블 C에서 삽입하고 있기 때문에?).

    대런은 여러 정체성이 결과 집합으로 다시 얻을 수없는, 여기 또한 정확합니다. 옵션은 커서를 사용하여 삽입 각 행에 대해 신원을 복용, 또는 전후의 ID를 저장 대런의 접근 방식을 사용하고 있습니다. 그래서 당신이 신원의 증가를 알고이 너무 오래 확실 테이블이 세 가지 이벤트에 대해 고정되어 있는지 확인로 작동합니다.

    그것은 나를, 그리고 그것이 아니었다 경우 중요한 나는 커서로 가고 싶어.

  2. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    5.당신은 항상이 동작을 원한다면, 당신은 테이블 B를 업데이트 할 것이다 테이블에 AFTER 삽입 트리거를 둘 수 있었다

    당신은 항상이 동작을 원한다면, 당신은 테이블 B를 업데이트 할 것이다 테이블에 AFTER 삽입 트리거를 둘 수 있었다

  6. ==============================

    6.당신은 행 번호에 가입하여 얻을 수 있습니다. 그것이 신분이기 때문에 당신이 당신이 그들을 선택하는 순서에있을 것입니다 항목을 추가 할 때, 그냥 증가 때문이 가능합니다.

    당신은 행 번호에 가입하여 얻을 수 있습니다. 그것이 신분이기 때문에 당신이 당신이 그들을 선택하는 순서에있을 것입니다 항목을 추가 할 때, 그냥 증가 때문이 가능합니다.

  7. ==============================

    7.나는 고유 식별자 타입 대신 ID를 사용하는 것이 좋습니다. 나는 당신이 삽입 전에 ID를 생성 할 수 있습니다이 경우는 :

    나는 고유 식별자 타입 대신 ID를 사용하는 것이 좋습니다. 나는 당신이 삽입 전에 ID를 생성 할 수 있습니다이 경우는 :

    update B set NewID = NEWID()
    
    insert into A(fname,lname,id) select fname,lname,NewID from B
    
  8. from https://stackoverflow.com/questions/95988/how-to-insert-multiple-records-and-get-the-identity-value by cc-by-sa and MIT license