请教这样的sql语句在delphi中怎么执行?怎么写成sql中的函数或过程
请问这样的sql语句在delphi中如何执行?如何写成sql中的函数或过程?
在sql查询分析器中执行如下语句正常返回一个表:
declare @sql varchar(8000)
set @sql = 'select djrq as 日期, '
select @sql = @sql + 'sum(case zyxm when ' ' '+zyxm+ ' ' '
then sl else 0 end) as ' ' '+zyxm+ ' ' ', '
from (select zyxm from bz_mxjdbb where djh= '1 ') as a
select @sql = left(@sql,len(@sql)-1) + ' from bz_mxjdbb where xsdbh= ' '111 ' ' (注:这里的111我想通过参数传递进去) group by djrq '
exec(@sql)
go
我想在sql中通过ADOQuery执行这个语句并使用这个表.现在的做法是:
1、在sql中创建一个函数get_zyxmmxjdsql (@xsdbh varchar(50)),想通过函数返回完整的sql语句出来再执行查询;
create function get_zyxmmxjdsql (@xsdbh varchar(50)) Returns varchar(8000) as
begin
DECLARE @sql varchar(8000)
SET @sql = 'select djrq as 日期, '
SELECT @sql = @sql + 'sum(case zyxm when ' ' ' + zyxm + ' ' '
then sl else 0 end) as ' ' '
+ zyxm + ' ' ', '
FROM (SELECT zyxm
FROM bz_mxjdbb
WHERE djh = '1 ') AS a
SELECT @sql = LEFT(@sql, len(@sql) - 1)
+ ' from bz_mxjdbb where xsdbh= '+@xsdbh+ ' group by djrq '
return @sql
end
在查询分析器中执行print dbo.get_zyxmmxjdsql ( '111 ')
可以看到完整的sql语句内容,但在sql中通过查询分析器中执行
select dbo.get_zyxmmxjdsql( '111 '),能显示出一段sql语句,但是不完整,后面的好像被截断了一样,是不是这个sql语句的长度超出字段的最大值了?
在delphi中这样写:
ADOQuery1.SQL.Text:= 'select dbo.get_zyxmmxjdsql ( ' ' '+TextEdit1.Text+ ' ' ') ';
ADOQuery1.Execute;
这样执行没提示出错,但在报表文件的数据源中提示N多字段没找到,也就是说在delphi中这样写不行...
请教各位XDJM我应该怎么办才可以达到我的目的:---执行这个sql并返回一个表
------解决方案--------------------
是不是 应该是:
在sql查询分析器中执行如下语句正常返回一个表:
declare @sql varchar(8000)
set @sql = 'select djrq as 日期, '
select @sql = @sql + 'sum(case zyxm when ' ' '+zyxm+ ' ' '
then sl else 0 end) as ' ' '+zyxm+ ' ' ', '
from (select zyxm from bz_mxjdbb where djh= '1 ') as a
select @sql = left(@sql,len(@sql)-1) + ' from bz_mxjdbb where xsdbh= ' '111 ' ' (注:这里的111我想通过参数传递进去) group by djrq '
exec(@sql)
go
我想在sql中通过ADOQuery执行这个语句并使用这个表.现在的做法是:
1、在sql中创建一个函数get_zyxmmxjdsql (@xsdbh varchar(50)),想通过函数返回完整的sql语句出来再执行查询;
create function get_zyxmmxjdsql (@xsdbh varchar(50)) Returns varchar(8000) as
begin
DECLARE @sql varchar(8000)
SET @sql = 'select djrq as 日期, '
SELECT @sql = @sql + 'sum(case zyxm when ' ' ' + zyxm + ' ' '
then sl else 0 end) as ' ' '
+ zyxm + ' ' ', '
FROM (SELECT zyxm
FROM bz_mxjdbb
WHERE djh = '1 ') AS a
SELECT @sql = LEFT(@sql, len(@sql) - 1)
+ ' from bz_mxjdbb where xsdbh= '+@xsdbh+ ' group by djrq '
return @sql
end
在查询分析器中执行print dbo.get_zyxmmxjdsql ( '111 ')
可以看到完整的sql语句内容,但在sql中通过查询分析器中执行
select dbo.get_zyxmmxjdsql( '111 '),能显示出一段sql语句,但是不完整,后面的好像被截断了一样,是不是这个sql语句的长度超出字段的最大值了?
在delphi中这样写:
ADOQuery1.SQL.Text:= 'select dbo.get_zyxmmxjdsql ( ' ' '+TextEdit1.Text+ ' ' ') ';
ADOQuery1.Execute;
这样执行没提示出错,但在报表文件的数据源中提示N多字段没找到,也就是说在delphi中这样写不行...
请教各位XDJM我应该怎么办才可以达到我的目的:---执行这个sql并返回一个表
------解决方案--------------------
是不是 应该是: