挿入された行のPK GUIDを取得する最良の方法
-
03-07-2019 - |
質問
この質問を読んで、挿入された行の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;
所属していません StackOverflow