返回已更新的记录数

时间:2016-03-31 15:27:32

标签: c# sql-server

我正在使用C#来运行Sql Server存储过程。我的语法是这样的

Update [silly]
Set [validname] = case 
                  when [Name] Not In ('BBABABA', 'SDLJK', 'KJSDJK') 
                  Then 'Yes' 
                  Else 'No' 
                  end
where [validname] IS NULL

当然执行时会返回5 rows updated或者更新了许多行。问题是,有没有办法让我返回C#语法,用Yes更新了多少行,用'No'更新了多少行

我正在使用SQL Server 2008

2 个答案:

答案 0 :(得分:2)

如果您使用的是较新版本的SQL,则可以使用OUTPUT子句,该子句将返回可以计算行数的数据集

Update [silly]
Set [validname] = case 
                  when [Name] Not In ('BBABABA', 'SDLJK', 'KJSDJK') 
                  Then 'Yes' 
                  Else 'No' 
                  end
Output inserted.validname
where [validname] IS NULL

修改

如果您希望避免在.net中迭代结果,我认为您可以将结果输出到临时表中,然后在临时表上运行查询

DECLARE @temp TABLE (
      validname [varchar] NULL
    )

Update [silly]
Set [validname] = case 
                  when [Name] Not In ('BBABABA', 'SDLJK', 'KJSDJK') 
                    Then 'Yes' 
                    Else 'No' 
                  end
Output inserted.validname into @temp
where [validname] IS NULL

SELECT validname, count(*)
FROM @temp
GROUP BY validname

答案 1 :(得分:0)

不,SQL Server Update语句将返回单个值,更新列的数量和它。它不会查看更新语句中的条件/案例。你需要改变你的SP。

您需要更改存储过程以首先计算[Name] not in ('banana', 'strawberry', 'tomatoes')行和不满足此条件的行。然后,您需要执行更新并将计数作为2 OUT参数返回。

如果需要,请在交易中包装。

PS。如果更新/插入/删除语句返回或填充临时表而不是仅返回一些受影响的记录,那将会很酷,但事实并非如此(请告诉我,如果我错了:D)