如何防止存储过程返回中间记录集?
问题描述:
问题背景:我用2008年的VisualStudio和类型化数据集,它提供一种“轻松”获得executescalar()
执行标返回第一recorset(最后一部分的第一行的第一个字段的值,而经常忽略)如何防止存储过程返回中间记录集?
这种行为的问题是最经常要进行一些其他要求你计算值前与最终select @returnValue
语句返回。
所以我的问题是,一般来说,如何防止SP返回中间记录集? (我试过SET FMTONLY ON/OFF,但有不必要的副作用行为)
另一个相关的问题是:你怎么阻止T-SQL 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
这是我的问题,它可以与第一个 “选择@c” 来解决;但我不知道你是否可以禁用recorset输出....
答
1 - 在没有目标的存储过程中没有多个select语句。即如果您运行SELECT 1,2,3
,然后运行SELECT 4,5,6
它将返回2个记录集。
2 - 我不确定为什么当您运行更新时将记录恢复。尝试设置SET NOCOUNT ON
以关闭“受影响的xx行”消息。
“你想提出一些其他请求” - 请向我们展示一些示例代码,以说明你在这里的意思 – AakashM 2010-12-10 14:13:50
我的意思是,例如,你计算一个存储更新的值,而你想要返回该值。在这种情况下,更新将成为第一个要返回的记录集 – oldbrazil 2010-12-10 14:20:51