8

나는 삽입 된 행의 ID를 얻는 것에 대해 this question을 읽었습니다. 제 질문은 일종의 관련입니다.삽입 된 행의 PK 가이드를 얻는 가장 좋은 방법

삽입 된 행에 대한 GUID를 가져 오는 방법이 있습니까? 내가 함께 일하고있는 테이블은 기본 키 (기본값 newid)로 GUID를 가지고 있으며, 행을 삽입 한 후 해당 GUID를 검색하고 싶습니다.

Guids에는 @@IDENTITY, IDENT_CURRENT 또는 SCOPE_IDENTITY과 같은 것이 있습니까?

답변

12

OUTPUT 기능을 사용하여 기본값을 매개 변수로 되돌릴 수 있습니다.

CREATE TABLE MyTable 
(
    MyPK UNIQUEIDENTIFIER DEFAULT NEWID(), 
    MyColumn1 NVARCHAR(100), 
    MyColumn2 NVARCHAR(100) 
) 

DECLARE @myNewPKTable TABLE (myNewPK UNIQUEIDENTIFIER) 

INSERT INTO 
    MyTable 
(
    MyColumn1, 
    MyColumn2 
) 
OUTPUT INSERTED.MyPK INTO @myNewPKTable 
VALUES 
(
    'MyValue1', 
    'MyValue2' 
) 

SELECT * FROM @myNewPKTable 

고유 식별자를 기본 키로 사용할 때는주의해야합니다. GUID의 인덱싱은 새로 생성 된 GUID를 인덱스 중간에 삽입하고 마지막에 추가해야하기 때문에 성능이 매우 떨어집니다. NewSequentialId()에 대한 SQL2005의 새로운 기능이 있습니다. 당신의 지침서에 모호성이 요구되지 않으면 가능한 대안.

+0

안녕하세요, 감사를 삽입합니다. 이 코드는 ""@myNewPK ""테이블 변수를 선언해야합니다. "라는 오류를 반환합니다. 그것은 당신이 테이블로만 출력 할 수있는 것 같습니다. 임시 테이블을 선언 한 다음 테이블에서 ID를 선택하여 작업하고 있습니다. 도와 주셔서 감사하고 Guides의 열악한 실적에 대한 조언을드립니다. –

+0

미안하지만, 나는 그것을 테스트하지 않았고, 단지 내가 기억하고있는 것을 함께 던지고 있었다. 이제 테이블 변수를 반환하는 응답을 업데이트했습니다. –

+0

아주 좋네요, 고마워요. 로빈. Accepted :) –

1

또 다른 청소기 접근, 조언을 하나의 행

CREATE TABLE MyTable 
(
    MyPK UNIQUEIDENTIFIER DEFAULT NEWID(), 
    MyColumn1 NVARCHAR(100), 
    MyColumn2 NVARCHAR(100) 
) 

DECLARE @MyID UNIQUEIDENTIFIER; 
SET @MyID = NEWID(); 

INSERT INTO 
    MyTable 
(
    MyPK 
    MyColumn1, 
    MyColumn2 
) 
VALUES 
(
    @MyID, 
    'MyValue1', 
    'MyValue2' 
) 

SELECT @MyID; 
관련 문제