我读过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