如何防止存储过程返回中间记录集?

时间:2010-12-10 14:11:22

标签: sql-server tsql stored-procedures executescalar

问题上下文:我使用VisualStudio 2008和类型化数据集,它们可以“轻松”访问executescalar() 执行标量返回第一个recorset 第一行的第一个字段的值(最后一部分经常被省略

此行为的问题在于,您通常希望在之前进行其他一些请求,并使用最终select @returnValue语句计算要返回的值。

所以我的问题一般是如何阻止SP返回中间记录集? (我试过SET FMTONLY ON / OFF但是有不必要的副作用)

另一个相关的问题是:如何阻止T-SQL UPDATE语句返回更新的行?有时您使用UPDATE来简单地更新......

谢谢!

样品:

BEGIN

SET NOCOUNT ON;

declare @c int
select  @c=(select count(*) from work where ...)
select @c   -- so ExecuteScalar() works 
update sousblocs set myfield = @c
       where ...

select @c --after the update, won't be seen by ExecuteScalar()
return @c --useless for ExecuteScalar

END

这是我的问题,可以用第一个“select @c”来解决;但我仍然想知道你是否可以禁用recorset输出....

1 个答案:

答案 0 :(得分:1)

1 - 没有目标的存储过程中没有多个select语句。即如果您运行SELECT 1,2,3然后SELECT 4,5,6,它将返回2个记录集。

2 - 我不确定为什么在运行更新时会收回记录。尝试设置SET NOCOUNT ON以关闭“xx行受影响”消息。