【问题标题】:Using OUTPUT for SQL Server 2008 on update?在更新时使用 OUTPUT for SQL Server 2008?
【发布时间】:2011-07-14 00:32:28
【问题描述】:

我在所有表中都使用带有 GUID 的 SQL Server 2008,并使用了一些存储过程。我想知道是否有办法输出您要更新到的当前 GUID?

我知道下面有我在其他程序中使用的代码:

output inserted.*
output deleted.*

但是,我有一个案例,即如果为空插入,则为更新。我想知道在每种情况下使用了哪个 GUID。我听说过另一种创建另一个表的方法,将表中的值设置为刚刚更新的 GUID,然后从新创建的表中选择值,但这似乎非常多余和不必要。有什么解决方法吗?

谢谢!

【问题讨论】:

    标签: sql-server-2008 stored-procedures


    【解决方案1】:

    您是否将 newid() 作为列的默认值,还是在插入/更新时在代码中生成 guid?

    如果您的默认值为 NewID(),则无法获取最后插入/更新的 ID,如果是身份,您可以使用 @@IDENTITY 获取最后插入的 ID。

    我能想到的唯一方法是从列中删除默认值,在代码中生成一个 NewID() 以进行插入并记住它是什么。

    (这个答案是假设您使用 GUIDS 作为 PK 的)

    【讨论】:

    • 它适用于插入的值。我仍然使用 GUID 行的默认值作为 NEWID() 并且它工作正常。但是,更新一不会传回 GUID。对我来说不是什么大问题,但肯定会带来不便。
    • GUID 是 PK 吗?如果是这样,那么您在进行更新时就已经知道了。否则,只需添加代码以根据与更新相同的 table/where 子句选择 guid 以获取您刚刚更新的那个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    相关资源
    最近更新 更多