Eden.Sun 发表于 2023-6-7 18:12:01

查询数据之前调用存储过程

本帖最后由 Eden.Sun 于 2023-6-7 18:12 编辑

最近遇到这样的一种使用场景,需要再数据集查询数据之前先调用数据库的存储过程,来刷新数据库的表数据,然后数据集再去查询数据库数据。因为我们报表在请求发送数据集数据请求的顺序是随机的,所以如果直接将执行存储过程的语句创建数据集的话,无法保证存储过程的执行顺序,所以我们需要换一个思路,绕一下。
我们知道,如果某个数据集A使用的参数来自于数据集B,那么A数据集会等待B数据集加载完成之后,从B数据集获取数据,然后查询自己本身的数据。那么我们就可以通过这种机制,将存储过程执行的返回结果,绑定到参数,然后将参数绑定到其他数据集上,但是不使用,这样就能保证存储过程的绝对优先执行。

首先我们在数据库创建存储过程:
ALTER PROC sp_proc1

as
      UPDATE . SET = +'1' WHERE = 1
      
BEGIN      
      select * from test_sql;
END这个存储过程的意思是,每次执行都对id=1的数据,的descs字段内容追加字符串1。如起始内容为 a,执行一次后的结果为 a1,两次为a11......




然后数据源(不做赘述。sqlserver创建数据源,可以参考我们的帮助文档:创建SqlServer数据源)


然后创建数据集,这个数据集用来执行我们的存储过程:


然后创建第二个数据集:
先创建参数,一定要注意,这个参数的参数值必须来源于存储过程的数据集:


然后添加数据集的查询语句:
select * from test_sql where 1=1 orid = @Parameter1

然后我们测试一下:我们存储过程的数据集是DataSet1,正常数据的查询时DataSet2,如果我们的数据是存储过程执行之后查的,那下图的两张表格的数据是完全相同的;反之,则两张表的数据的 descs 列的数据,肯定会不一样:



预览:


页: [1]
查看完整版本: 查询数据之前调用存储过程