查询树型表函数的问题,崩溃啊

yunhaiC QQ71444468 2011-03-21 02:51:44

CREATE function f_pid1(@id int,@tablename varchar(30)) returns varchar(100)
as
begin
declare @re_str as varchar(100)
set @re_str = ''
select @re_str = name from @tablename where id = @id
while exists (select 1 from @tablename where id = @id and pid is not null)
begin
select @id = b.id , @re_str = b.name + ',' + @re_str from @tablename a , @tablename b where a.id = @id and a.pid = b.id
end
return @re_str
end


他说我没声明@tablename,这个是传过来的参数啊,郁闷,到底怎么改,也有网友说用exec动态执行,但是我改来改去还是有bug,请教啊

CREATE function f_pid1(@id int,@tablename varchar(20)) returns varchar(100)
as
begin
declare @re_str as varchar(100)
set @re_str = ''
exec('select '+@re_str+' = name from '+@tablename+' where id = '+rtrim(@id))
exec('while exists (select 1 from tb where id = '+rtrim(@id)+' and pid is not null)
begin
select '+rtrim(@id)+' = b.id , '+@re_str+' = b.name + '','' + '+@re_str+' from '+@tablename+' a , tb b where a.id = '+rtrim(@id)+' and a.pid = b.id
end')
return @re_str
end
...全文
69 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wokelv 2011-05-13
>>>> 函数里没法执行动态

那数据库里的 内部函数(Avg, Sum, Count等)怎么实现的..
求解..
回复
至今没有完全解决
回复
xiangchao107 2011-03-21
有高手解决了没有啊,正需要这方面的东西
回复
[Quote=引用 3 楼 acherat 的回复:]

存储过程也可以加参数!
[/Quote]

create Procedure f_pid1
@id int,
@tablename varchar(30),
@re_str varchar(100) output
as
begin
set @re_str = ''
select @re_str = name from @tablename where id = @id
while exists (select 1 from @tablename where id = @id and pid is not null)
begin
select @id = b.id , @re_str = b.name + ',' + @re_str from @tablename a , @tablename b where a.id = @id and a.pid = b.id
end
end

还是不行
回复
存储过程也可以加参数!
回复
[Quote=引用 1 楼 xiao_ai_mei 的回复:]

函数里没法执行动态
改存储过程吧
[/Quote]
但是我可能有其他表也需要用这个功能,我不能每次都要根据各个表写同样的功能啊,所以还是需要放在函数里面
回复
Xiao_Ai_Mei 2011-03-21
函数里没法执行动态
改存储过程吧
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2011-03-21 02:51
社区公告
暂无公告