调用SqlServer存储过程报没有返回数据集错误

楼主
我是社区第238588位番薯,欢迎点我头像关注我哦~
1. 问题描述

在 SQL Server 数据库中,若定义的存储过程中包含有 insert/Update 等更新操作时,在设计器中对存储过程进行调用时,会提示没有返回数据集的错误,如下图所示:

而在数据库端执行存储过程,能够查询出结果如下:

2. 解决方案

在存储过程中增加 SET NOCOUNT ON (不返回受影响行数),让数据库端不将影响的行数返回给客户端或者在模板数据集>数据库查询调用存储过程并设置 SET NOCOUNT ON。

下面我们以一个具体的示例看下如何设置。

3. 示例

如已经存在了带有 insert/update 的一个简单的存储过程,如下:

  1. create PROCEDURE [dbo].[prc_stuff]   
  2. AS   
  3. BEGIN   
  4.    INSERT INTO dbo.雇员(雇员id,姓氏) values(10,'薛')   
  5.   SELECT * from dbo.雇员where 姓氏= '薛'   
  6. END
复制代码
3.1 通过修改存储过程

此时修改存储过程,在BEGIN开始时加上SET NOCOUNT ON,如下:

  1. ALTER PROCEDURE [dbo].[prc_stuff]   
  2. AS   
  3. BEGIN   
  4.    SET NOCOUNT ON  
  5.    INSERT INTO dbo.雇员(雇员id,姓氏) values(10,'薛')   
  6.    SELECT * from dbo.雇员where 姓氏= '薛'   
  7. END
复制代码

3.2 通过在数据库查询处调用存储过程

若存储过程已经定义好,不希望再修改,这时可以通过模板数据集>数据库查询处调用存储过程,并在调用前增加 SET NOCOUNT ON,最后执行的语句为:

  1. SET NOCOUNT ON  
  2. EXEC dbo.prc_stuff
复制代码

注:Oracle 数据库中不存在这样的问题,只要成功创建一个存储过程,在设计器中正常调用即可,不会出现类似的问题。


分享扩散:

沙发
发表于 2023-4-26 13:54:55
感谢,解决大问题
板凳
发表于 2023-6-23 11:52:57
可以参考
地板
发表于 2023-6-23 11:54:04
3.2 通过在数据库查询处调用存储过程
是不是存储过程必须设置返回值
5楼
发表于 2023-10-27 10:20:26
膜拜大神,解决了大问题!!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

4回帖数 5关注人数 17377浏览人数
最后回复于:2023-12-11 16:44

返回顶部 返回列表