質問

この質問を読んで、挿入された行のID。私の質問は関連しています。

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

GUIDには @@ IDENTITY IDENT_CURRENT 、または SCOPE_IDENTITY などがありますか?

役に立ちましたか?

解決

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をインデックスの中央に挿入する必要があり、まれに最後に追加するだけなので、パフォーマンスが極端に低下します。 SQL2005にはNewSequentialId()の新しい機能があります。 Guidsで不明瞭さを必要としない場合は、可能な代替手段です。

他のヒント

単一の行を挿入する場合の別のわかりやすいアプローチ

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