我正在使用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
答案 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)