문제

나는 읽었다 이 질문 삽입 된 행의 신원을 얻는 것에 대해. 내 질문은 일종의 관련이 있습니다.

삽입 된 행에 대한 GUID를 얻는 방법이 있습니까? 내가 작업중인 테이블에는 기본 키 (NewID로 기본값)로 가이드가 있으며 행을 삽입 한 후 해당 안내서를 검색하고 싶습니다.

같은 것이 있습니까? @@IDENTITY, IDENT_CURRENT 또는 SCOPE_IDENTITY 안내?

도움이 되었습니까?

해결책

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

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

그래도 고유 식별자를 기본 키로 사용하여주의해야합니다. 새로 생성 된 가이드를 인덱스의 중간에 삽입하고 끝에 추가로 추가되기 때문에 안내서에 인덱싱은 성능이 매우 저하됩니다. SQL2005에는 newseventient ()에 대한 새로운 기능이 있습니다. 안내에 대한 모호함이 필요하지 않으면 가능한 대안입니다.

다른 팁

단일 행을 삽입하는 경우 또 다른 클리너 접근 방식

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;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top