SQL中如何创建函数能返回一个select语句查询出来的表? ( 积分: 100 )

C

cnhotel

Unregistered / Unconfirmed
GUEST, unregistred user!
在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执行这个语句并使用这个表.

请问上面的sql语句如何写成函数或过程,然后能在delphi中调用这个函数或过程?
 
好像在哪里见过这个问题

帮顶一下

偶的SQL也不咋地
 
CREATE FUNCTION <inline_function_name, sysname, test_function>
(<@param1, sysname, @p1> <data_type_for_param1, , int>,
<@param2, sysname, @p2> <data_type_for_param2, , char>)
RETURNS TABLE
AS
RETURN SELECT @p1 AS c1,
@p2 AS c2
GO


======================================================
以上是SQL SERVER 2000中内联函数的创建模板,你看看就知道了。
 
你的说明我没有看多明白~!我只看出你想要一个查询后得出结果的表对吧?
我给一个例子
ruanjian.Close;
ruanjian.SQL.Clear;
ruanjian.SQL.Add('insert into ruanjianku (软件名,软件介绍) values :)a,:b)');
ruanjian.Parameters.ParamByName('a').Value:=edit1.Text;
ruanjian.Parameters.ParamByName('b').Value:=memo1.Text;
ruanjian.ExecSQL;
ruanjian.Close;
ruanjian.SQL.Clear;
ruanjian.SQL.Add('select *from ruanjianku');
ruanjian.ExecSQL;
ruanjian.Active :=TRue;

向ADOQuery1 = ruanjian添加新的记录并显示出新的数据

字符串变量:=ruanjian.FieldByName('软件名').AsString; 读取字段里面的值
插入和查询查不多~!只是换下SQL语句就行了~!你自己换下就可了~!
如果你想要在显示个别列就把*换成你要显示列的名就行了~!
 
感谢楼上几位关注
eastweast大大说的模板我在看,不怎么太懂...
shaoying兄弟可能没有把我的问题看清楚,您的回答和我的问题不是太相关.

继续思考中
 
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

出现奇怪的问题:
在查询器中执行
select dbo.get_zyxmmxjdsql('1111')
返回一段sql语句的内容不全,只能显示256个字符?
而通过
print dbo.get_zyxmmxjdsql('1111')显示出的sql语句则是内容全的,是543个字符

为什么这样?我如何能得到返回的全部语句而不是256个字符呢?
 
其实真的看不懂你问的问题
 
可以用存储过程试试看
 
呵呵,魁,我的问题很难看懂么?就是想把上述的sql语句改写为函数或者存储过程然后在delphi中调用而已啊...

huangli_nj:我也想写成存储过程,只是不会写,才请教这里的高手帮助看看的...
 
CREATE PROCEDURE PROCEDUREName --存储过程名称
@paraName varchar(9) --参数名称
as
begin
你要实现的sql语句
end
然后再用ADOStoredProc就可以了
 
谢谢各位帮助
 

Similar threads

S
回复
0
查看
949
SUNSTONE的Delphi笔记
S
S
回复
0
查看
770
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
顶部