如果我有这样的存储过程:
...
set @query = N'select @total = count(*) from (...)';
exec sp_executesql @query @total output;
return
现在在C#代码中我打开一个ExecuteReader,执行这个存储过程并开始阅读,我实际上在读什么?它是来自exec还是归来的结果?如果是来自exec,是不是exec只是将变量总数设置为某个值?为什么我的代码中的ExecuteReader仍然正常读取行?
我对ExecuteReader处理存储过程的方式感到困惑。
答案 0 :(得分:0)
当然output
是一个关键字,它告诉存储过程返回时输出变量应该是什么。
答案 1 :(得分:0)
您将不会读取任何内容,因为没有创建结果集。你只需要分配一个变量。
答案 2 :(得分:0)
ExecuteReader读取查询返回的任何结果集。如果您的查询中有三个SELECT,则ExecuteReader将允许您访问所有这三个结果集。您可以使用reader.NextResult()
在集合之间移动。
如果您的查询包含对EXEC的调用,而EXEC又生成结果集(也许您使用EXEC调用的过程包含SELECT),则ExecuteReader将读取该结果集。
除了查询返回的结果集之外,它不会挂钩。
有关详情:http://msdn.microsoft.com/en-us/library/haa3afyz(v=vs.110).aspx