我讀過this question獲取插入行的身份。我的問題是有關聯的。獲取插入行的PK Guid的最佳方式
有沒有辦法讓插入的行的GUID?我正在使用的表具有作爲主鍵的guid(默認爲newid),並且我想在插入行後檢索該guid。
對於Guids有沒有類似@@IDENTITY
,IDENT_CURRENT
或SCOPE_IDENTITY
?
我讀過this question獲取插入行的身份。我的問題是有關聯的。獲取插入行的PK Guid的最佳方式
有沒有辦法讓插入的行的GUID?我正在使用的表具有作爲主鍵的guid(默認爲newid),並且我想在插入行後檢索該guid。
對於Guids有沒有類似@@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;
您好,感謝您的意見。此代碼返回錯誤「必須聲明表變量」@myNewPK「」。看來你只能輸出到一個表格中。我已經通過聲明一個臨時表然後從表中選擇ID來工作。感謝您的幫助,並就Guids的糟糕表現提供建議。 – 2009-05-01 10:27:15