本文介绍了直接SQL账表配置中的语句问题及其解决方案。直接SQL账表易于通过编写SQL语句实现数据统计分析,但需注意SQL语句的正确性和效率。针对某些复杂的SQL操作,如创建临时表后再删除,直接执行会报错,可通过将SQL脚本封装为存储过程来解决,确保报表运行正常,并通过监控工具验证调用过程。
写本帖子的目的,有直接SQL配置的语句问题,能够参看本帖子自行分析解决。
对于账表的开发,直接sql账表相对来说是比较容易的,
可以直接写sql语句,实现数据的统计分析。
其实不仅是直接sql账表,包括简单账表、分页账表、树形账表、透视表 取数过程都是一致的。
下面就以简单的直接sql账表的语句来做分析
如下图:
在直接sql账表数据源,我们写了一个用户名称的查询,
实际运行的效果:
那么对于我们设置的语句,直接sql账表取数是如何用的呢?
对于SQL Server 数据库,我们可以通过 SQL Server Profiler进行监控看下,
我们打开SQL Server Profiler,
点击账表“刷新”菜单,
可以看到监控到的数据库执行的语句,
对于监控到的语句我们按关键字“T_SEC_USER”搜索下
可以看到一串这样的sql语句,
Select B.*,ROW_NUMBER() OVER(ORDER BY FIDENTITYID_SEQ) FIDENTITYID INTO TMP76E324C8265D11E7A2B878ACC1A FROM (Select A.*,1 FIDENTITYID_SEQ FROM (select FNAME from T_SEC_USER) A) B
复制代码
语句中的 select FNAME from T_SEC_USER 也就是我们在直接sql 账表配置界面编写的脚本,
直接sql账表在运行时外面多加了一层取数的调用,主要目的是向一个受到平台管理的临时表插入数据,
其中的“TMP76E324C8265D11E7A2B878ACC1A”就是平台管理的临时表,
语句大体 就是 select * into 平台管理的临时表 from (配置的sql脚本) temp,
这里也许有人会问,为什么要加入到一个平台关联的临时表,好处是什么?
好处就是平台会对生成的临时表,可以做到及时清理,
账表界面的展现的,需要数据中有对应的表进行存储,
而账表的取数查询也就是当时界面打开取数查看下,
对应的数据表里面就可以不需要了,
使用平台管理的临时表,就可做的及时清理掉。
知道上述的直接sql账表语句运行的原理后,我们也就对于一些情况可以做自行分析下,
设置语句测试及设置都成功,但运行不成功。
实际例子:
我们有这样一串sql语句:
语句中我们自己创建一个表,向表中插入数据,获取数据,最后把表删掉,
create table #temp(
field1 varchar(50))
insert into #temp select 'hola'
select * from #temp
drop table #temp
复制代码
配置界面如下,
其实这串语句进行测试及在直接sql账表数据源向导一步步是可以设置成功的。
点“测试”可以测试成功,
点“下一步”,也是可以正常到下一步,最终可以设置完成,
我们把下一步都走完,最终完成,看下实际的运行效果吧,
我们把“简要信息”展开,看到了实际的取数语句,
也就是我们前面说的,select * into 平台管理的临时表 from (配置的sql脚本) temp
分析语法,对于写的sql脚本,能否运行时成功取数
我们是可以把语句精简为如下
select * from
(
我们配置的sql脚本
) temp
对于我们新配置的报错脚本,
拼接的语句就为:
select * from
(
create table #temp(
field1 varchar(50))
insert into #temp select 'hola'
select * from #temp
drop table #temp
) temp
复制代码
我们直接把语句写的SQL Server中看下,报错了,是不合法的。
那么我就有这样的需求该怎么办呢?
好办 SQL语句界面是支持存储过程的,
既然直接写SQL语句通不过,
我们就改成为存储过程试下看,
数据库中把前面的脚本创建存储过程,
创建存储过程sql脚本,
create proc text_temp
as
create table #temp(
field1 varchar(50))
insert into #temp select 'hola'
select * from #temp
drop table #temp
复制代码
修改报表的SQL语句,测试及一路下一步设置完成,
改造为存储过程后我们来看下效果,
报表运行正常了,
通过监控工具我们也可以看到,实际是直接调用设置的存储过程。
至此,目的相信已经达到了,后面再有直接SQL配置的语句问题,就可以自行解决了。
完。
推荐阅读