首页 > 解决方案 > 如何从“使用输出子句更新”查询返回不同的结果

问题描述

UPDATE top (5) Alert SET Notify = 1 OUTPUT inserted.OrderNo as orderNo,inserted.UserId as userId 
  where UserId = ('rekon') and Notify = 0

这是我的带有输出子句的更新查询,所有具有匹配 userId 的条目的记录都得到更新,但是有没有一种方法可以限制不同的 OrderNo 作为输出子句的结果?

UserId  OrderNo     Notify  ProcessedTime
rekon   3006856996     0             25:08.7
rekon   3006856996     0             12:05.9
rekon   3006856996     0             18:56.9
rekon   3006857268     0             12:27.0
rekon   3006857015     0             20:59.9
rekon   3006857015     0             14:08.8
rekon   3006856996     0             47:16.0
rekon   3006857015     0             27:11.3
rekon   3006857015     0             49:20.7

标签: sql-servertsqlsql-server-2012

解决方案


OUTPUT 子句的定义如下

::= {
[ 输出到 { @table_variable | 输出表 } [ ( 列列表 ) ] ]
[ 输出 ] } ::= { | 标量表达式 } [ [AS] column_alias_identifier ]
[ ,...n ]

::= { 已删除 | 插入 | from_table_name } 。{ * | 列名}
| $行动

所以你可以像这样使用它:

UPDATE TOP (5) Alert 
   SET Notify = 1 
OUTPUT inserted.OrderNo as orderNo,
       inserted.UserId as userId
 INTO #tmpNotify
WHERE UserId = ('rekon') 
  AND Notify = 0

-- then select it:
SELECT distinct orderNo,
                 userId
  FROM #tmpNotify

推荐阅读