【问题标题】:sql how to select and update at the same timesql如何同时选择和更新
【发布时间】:2015-09-21 20:33:21
【问题描述】:

我有一个表,其中有一列 processed 它的值为零表示失败,1 表示成功。我想添加第三个临时案例,它的值为2。

我之前的查询是:

string query = "SELECT * FROM dbo.tableName WHERE processed = @processed";

我想对此选择的行进行更新。我当然可以从 .net 做到这一点,但我想知道是否有一个查询可以同时选择行并更新流程列。

我正在使用 sql server 2008

该问题说明了一个非常古老的解决方案,即输出,我自己无法发现它。

【问题讨论】:

标签: .net sql-server database sql-server-2008


【解决方案1】:

你可以使用OUTPUT clause:

UPDATE dbo.tableName 
SET processed = 2 --or whatever you want..
OUTPUT inserted.*
WHERE processed = @processed

来自 MSDN(上面的链接):

从受影响的每一行返回信息或表达式 通过 INSERT、UPDATE、DELETE 或 MERGE 语句。这些结果可以 返回到处理应用程序

【讨论】:

    【解决方案2】:

    我假设您想要对选定的行执行某种原子记录锁定。不确定 T-SQL,但在 Oracle 中,您可以使用 UPDATE 表 SET PROCESSED = 2 WHERE 条件 RETURNING primary_key BULK COLLECT INTO 数组来执行此操作。然后对其键存储在数组中的行执行 select *。

    我认为 T-SQL 语法类似于 UPDATE table SET PROCESSED = 2 OUTPUT primary_key INTO temp_table WHERE 条件。

    【讨论】:

    • 所以你是建议把我企业的数据库改成使用Oracle?
    • 认真阅读我对元meta.stackoverflow.com/questions/305838/…典型情况的抱怨
    • 我只是建议您可以尝试这种方法,将其转换为 T-SQL,如果有等效于“返回/批量收集到”的内容。
    猜你喜欢
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    相关资源
    最近更新 更多