11

挿入された行のIDを取得することについてのこの質問を読みました。私の質問はある種関連しています。

挿入された行のGUIDを取得する方法はありますか?私が使用しているテーブルには、主キーとしてguid(デフォルトはnewid)があり、行を挿入した後でそのGUIDを取得したいと思います。

@@IDENTITYIDENT_CURRENTまたはGUID用のようなものはありSCOPE_IDENTITYますか?

4

2 に答える 2

16

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の新機能があります。GUIDにあいまいさが必要ない場合は、代替案として考えられます。

于 2009-05-01T10:03:54.980 に答える
3

単一の行を挿入する場合の別のよりクリーンなアプローチ

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;
于 2015-11-10T13:58:47.680 に答える