请问这样的sql语句在delphi中如何执行?如何写成sql中的函数或过程? ( 积分: 50 )

C

cnhotel

Unregistered / Unconfirmed
GUEST, unregistred user!
在sql查询分析器中执行如下语句正常返回一个表:<br><br>declare&nbsp;@sql&nbsp;varchar(8000)<br>set&nbsp;@sql&nbsp;=&nbsp;'select&nbsp;djrq&nbsp;as&nbsp;日期,'<br>select&nbsp;@sql&nbsp;=&nbsp;@sql&nbsp;+&nbsp;'sum(case&nbsp;zyxm&nbsp;when&nbsp;'''+zyxm+'''&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then&nbsp;sl&nbsp;else&nbsp;0&nbsp;end)&nbsp;as&nbsp;'''+zyxm+''','<br>&nbsp;&nbsp;from&nbsp;(select&nbsp;zyxm&nbsp;from&nbsp;bz_mxjdbb&nbsp;where&nbsp;djh='1')&nbsp;as&nbsp;a<br>select&nbsp;@sql&nbsp;=&nbsp;left(@sql,len(@sql)-1)&nbsp;+&nbsp;'&nbsp;from&nbsp;bz_mxjdbb&nbsp;where&nbsp;xsdbh=''111''&nbsp;(注:这里的111我想通过参数传递进去)&nbsp;group&nbsp;by&nbsp;djrq'<br>exec(@sql)<br>go<br><br>我想在sql中通过ADOQuery执行这个语句并使用这个表.现在的做法是:<br><br>1、在sql中创建一个函数get_zyxmmxjdsql&nbsp;(@xsdbh&nbsp;varchar(50)),想通过函数返回完整的sql语句出来再执行查询;&nbsp;<br><br>create&nbsp;function&nbsp;get_zyxmmxjdsql&nbsp;(@xsdbh&nbsp;varchar(50))&nbsp;&nbsp;Returns&nbsp;varchar(8000)&nbsp;as<br>begin<br>&nbsp;&nbsp;DECLARE&nbsp;@sql&nbsp;varchar(8000)<br>&nbsp;&nbsp;SET&nbsp;@sql&nbsp;=&nbsp;'select&nbsp;djrq&nbsp;as&nbsp;日期,'<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;@sql&nbsp;=&nbsp;@sql&nbsp;+&nbsp;'sum(case&nbsp;zyxm&nbsp;when&nbsp;'''&nbsp;+&nbsp;zyxm&nbsp;+&nbsp;'''&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then&nbsp;sl&nbsp;else&nbsp;0&nbsp;end)&nbsp;as&nbsp;'''<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;zyxm&nbsp;+&nbsp;''','<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;(SELECT&nbsp;zyxm<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;bz_mxjdbb<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;djh&nbsp;=&nbsp;'1')&nbsp;AS&nbsp;a<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;@sql&nbsp;=&nbsp;LEFT(@sql,&nbsp;len(@sql)&nbsp;-&nbsp;1)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;'&nbsp;from&nbsp;bz_mxjdbb&nbsp;where&nbsp;xsdbh='+@xsdbh+'&nbsp;group&nbsp;by&nbsp;djrq'&nbsp;<br>&nbsp;&nbsp;return&nbsp;@sql<br>end<br><br>在查询分析器中执行print&nbsp;dbo.get_zyxmmxjdsql&nbsp;('111')<br>可以看到完整的sql语句内容,但在sql中通过查询分析器中执行<br>select&nbsp;dbo.get_zyxmmxjdsql('111'),能显示出一段sql语句,但是不完整,后面的好像被截断了一样,是不是这个sql语句的长度超出字段的最大值了?<br><br>在delphi中这样写:<br>ADOQuery1.SQL.Text:='select&nbsp;dbo.get_zyxmmxjdsql&nbsp;('''+TextEdit1.Text+''')';<br>ADOQuery1.Execute;<br>这样执行没提示出错,但在报表文件的数据源中提示N多字段没找到,也就是说在delphi中这样写不行...<br><br>请教各位XDJM我应该怎么办才可以达到我的目的:---执行这个sql并返回一个表
 
自己顶下<br>下午大家有空帮看看~~~
 
可怜啊,我自己再顶~~~
 
ADOQuery1.SQL.Text:='exec(dbo.get_zyxmmxjdsql&nbsp;('''+TextEdit1.Text+''')';<br>ADOQuery1.Execute;<br>这样试一下。
 
gj123root<br>的方法应该可以<br>既然做成了函数应该让函数直接返回结果应该还要方便些吧
 
gj123root提供的方法<br>我在查询分析器里面执行<br>exec&nbsp;(dbo.get_zyxmmxjdsql&nbsp;('1111'))<br>提示:<br>第&nbsp;1&nbsp;行:&nbsp;'dbo'&nbsp;附近有语法错误。<br>用&nbsp;print&nbsp;(dbo.get_zyxmmxjdsql&nbsp;('1111'))&nbsp;这样执行就没有错...
 
把exec后面的括号去掉这样执行<br>exec&nbsp;dbo.get_zyxmmxjdsql('1111')<br>提示<br>第&nbsp;1&nbsp;行:&nbsp;'1111'&nbsp;附近有语法错误。<br><br>哭啊...help&nbsp;me
 
那就把<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;@sql&nbsp;=&nbsp;LEFT(@sql,&nbsp;len(@sql)&nbsp;-&nbsp;1)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;'&nbsp;from&nbsp;bz_mxjdbb&nbsp;where&nbsp;xsdbh='+@xsdbh+'&nbsp;group&nbsp;by&nbsp;djrq'&nbsp;<br>&nbsp;&nbsp;return&nbsp;@sql<br>end<br>改成<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;@sql&nbsp;=&nbsp;LEFT(@sql,&nbsp;len(@sql)&nbsp;-&nbsp;1)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;'&nbsp;from&nbsp;bz_mxjdbb&nbsp;where&nbsp;xsdbh='+@xsdbh+'&nbsp;group&nbsp;by&nbsp;djrq'&nbsp;<br>&nbsp;&nbsp;exec&nbsp;(@sql)<br>end<br>调用时直接&nbsp;get_zyxmmxjdsql('1111')
 
感谢楼上,直接改成exec&nbsp;(@sql)是不行的<br>函数需要返回值啊...没有return函数都编译不过去<br>继续顶~~
 
把函数改成存储过程不就得了。
 
用AdoDataSet
 
谢谢各位帮助
 
顶部