从存储过程插入中返回GUID

3
我有一些存储过程需要向SQL Server数据库中插入记录。我想返回GUID以便于在将来的插入操作中使用,或者用于其他用途。
我知道可以在存储过程中生成GUID并从中返回它,但是我想避免在那里生成它,因为该行的主键(guid)已经有默认值。我记得有一个类似于SCOPE_IDENTITY的函数,用于返回刚使用的自增列,是否有类似于此的用于GUID的函数?
感谢您的帮助!谢谢 :)
2个回答

8

您可以使用插入语句中的输出子句。

像这样从存储过程返回结果集。ID是带有默认newid()的唯一标识符。

insert into YourTable(Col1)
output inserted.ID 
values (1)

或者将其捕获到表变量中,然后在此之后进行任何所需的操作。

declare @T table(ID uniqueidentifier)

insert into YourTable(Col1)
output inserted.ID into @T 
values (1)

select *
from @T

2
不,没有SCOPE_GUID()或类似的函数。为什么您关心使用在列上定义的默认值还是手动声明自己的值并插入它呢?如果您正在使用NEWSEQUENTIALID(),我可以理解,但对于NEWID(),我只会建议先创建它,然后手动插入它。这将使您能够返回生成的值,而无需再次查询表(您需要以其他方式标识新行)。如果您不使用默认值,SQL Server不会受到影响;默认值存在于事件未显式提供值的情况下的后备方案。

如果可能的话,我宁愿避免这个问题——主要是因为我不想重写大约50个存储过程来适应数据库已经处理好的东西,但有时候你必须做你必须做的事情。你只需要这样做:DECLARE @GUID uniqueidentifier, SET @GUID = NEWID(),最后返回@GUID即可。 - ImGreg
是的。如果你需要将GUID返回给应用程序,那么你必须改变50个过程,对吧?这就是重构的全部意义所在。 - Aaron Bertrand
我感到有点傻,没有意识到我可以只返回NEWID() lol - Jared Beach

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接