在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并返回一个表

解决方案 »

  1.   

    执行select dbo.get_zyxmmxjdsql ('''+TextEdit1.Text+''')'
    在事件探察器跟踪不能看到具体的sql语句内容...ADOQuery1.Open
    执行没提示出错,但在报表文件的数据源中提示N多字段没找到...
    因为在查询器中用select dbo.get_zyxmmxjdsql('111') 得出来的sql语句就不全,被截取了部分...我在
    ADOQuery1.OPen;
    后面加上
    ShowMessage(DateToStr(ADOQuery1.fieldbyname('djrq').AsDateTime));
    提示djrq字段找不到,该字段一定存在,那就是上面的sql没有正常执行...
      

  2.   

    是不是 应该是:
    ADOQuery1.SQL.Text:='exec (dbo.get_zyxmmxjdsql ('''+TextEdit1.Text+''')) ';
    ADOQuery1.open;