FR9.0中,用户自定义表类型作为参数传递时,执行存储过程后提示“数据集没有返回值”

FR9.0,Sql2008r2数据库,定义用户自定义表类型

CREATE TYPE [dbo].[xTableType] AS TABLE(

[id] [int] NULL,

[NAME] [nvarchar](100) NULL

)

存储过程为:

ALTER PROCEDURE [dbo].[SP_TbType]

(

    @tb xTableType READONLY

)

AS

BEGIN

set nocount on

    SELECT * FROM @tb

    select 1

END

在存储过程中已经启用了set nocount,

在SSMS中,执行存储过程

DECLARE @tb1 xTableType

INSERT INTO @tb1 VALUES (1,'fdsfdsf')

EXEC SP_TbType @tb=@tb1

可以返回正确的结果

image.png

在FR9.0的设计器中,执行,则报错:“该语句没有返回结果集”

image.png

需要用到用户表类型作为参数传递给存储过程,请求帮助这个问题应该怎么解决。

追加:

注释掉Insert into 语句后,可以正常执行,但是没有结果,因为表里没数据。

image.png

FineReport cyb435 发布于 2022-7-11 14:55 (编辑于 2022-7-11 15:09)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
Z4u3z1Lv6专家互助
发布于2022-7-11 15:01

在数据集前面加set nocount on 试试

image.png

  • cyb435 cyb435(提问者) 可以了,得在设计器的查询语句中加SET NOCOUNT ON ,在存储过程中加没效果。哎,上周五也是这么加的,搞了一天都不行,以后再多测试吧。
    2022-07-11 15:38 
  • Z4u3z1 Z4u3z1 回复 cyb435(提问者) 通常情况下我们把增删改全放存储过程里面,然后在存储过程begin 后加set nocount on;这是没问题的。但是你在存储过程前加了增删改语句,set nocount on 管不了存储过程外的操作了
    2022-07-11 15:41 
最佳回答
0
snrtuemcLv8专家互助
发布于2022-7-11 14:56

帆软需要执行后有返回值

你这个可以在存储过程最后加一句

select 1

这样就可以了

  • cyb435 cyb435(提问者) 不行,我试过了,在存储过程中增加了select 1,以及在设计器中增加了select 1,问题依旧。目前怀疑是执行存储过程时,解析器或者设计器啥的不支持用户自定义表类型,应该是兼容性的问题,去掉Insert那行语句,执行不报错,但是同样也查询不出数据
    2022-07-11 15:05 
  • snrtuemc snrtuemc 回复 cyb435(提问者) 把insert语句也放到存储过程试试,帆软的数据集sql中临时表,插入,修改语句都是不支持的,它只支持查询和存储过程的调用
    2022-07-11 15:09 
  • cyb435 cyb435(提问者) 回复 snrtuemc insert 语句不能放到存储过程中,必须要再执行存储过程时添加,因为要作为参数传递给存储过程的。
    2022-07-11 15:55 
  • 2关注人数
  • 372浏览人数
  • 最后回答于:2022-7-11 15:09
    请选择关闭问题的原因
    确定 取消
    返回顶部