Sql server 获取插入行的PK Guid的最佳方法
我读过关于获取插入行的标识的内容。我的问题有点相关 有没有办法获取插入行的guid?我正在使用的表有一个guid作为主键(默认为newid),我希望在插入行后检索该guidSql server 获取插入行的PK Guid的最佳方法,sql-server,sql-server-2005,insert,identity,uniqueidentifier,Sql Server,Sql Server 2005,Insert,Identity,Uniqueidentifier,我读过关于获取插入行的标识的内容。我的问题有点相关 有没有办法获取插入行的guid?我正在使用的表有一个guid作为主键(默认为newid),我希望在插入行后检索该guid guid是否有类似于@@IDENTITY、IDENT\u CURRENT或SCOPE\u IDENTITY的内容?您可以使用输出功能将默认值返回到参数中 CREATE TABLE MyTable ( MyPK UNIQUEIDENTIFIER DEFAULT NEWID(), MyColumn1 NVARCH
guid是否有类似于
@@IDENTITY
、IDENT\u CURRENT
或SCOPE\u IDENTITY
的内容?您可以使用输出功能将默认值返回到参数中
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()的新功能。如果您的guid不需要晦涩,那么它是一种可能的替代方法。另一种更干净的方法,如果插入一行
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糟糕性能的建议。对不起,我没有测试它,只是根据我的记忆把它拼凑起来。现在更新了答案,返回了一个表变量。不知道为什么不先进入临时表而直接选择插入值会有问题。。。“插入表(字段)输出插入。*值(字段值)”非常适合我。SQL Server 10.0.1600。我认为@MichaelBray有道理;(“无需单独选择…”)。还请注意为一个插入行获取单个GUID(
ExecuteScalar
),或为同时插入的多行获取多个GUID(ExecuteReader
)之间的区别,