请教这样的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并返回一个表


------解决方案--------------------
是不是 应该是: