存储过程这样写到底错在哪里了啊,着急等待。。。
下面这个存储过程只是想从getTbname存储过程返回的表名中查询其中的数据而已
保存时总是说:必须声明变量'tname'
CREATE procedure testGetTbname
@param1 varchar(100),@param2 varchar(100)
as
declare @tname varchar(100)
select * from @tname exec getTbname @param1,@param2
GO
被调用的存储过程getTbname如下,该过程返回的是一个表名
create procedure getTbname
@param1 varchar(100),@param2 varchar(100)
as
select tname from bd_sccjxh where tname in(select tname from bd_sccjxh where cjbh=(select cjbh from bd_zzcj where cjmc = @param1)
and xhbh in(select xhbh from bd_sccjxh where cjbh=(select cjbh from bd_zzcj where cjmc = @param2))
and xhbh in(select xhbh from bd_sccjxh where cjbh=(select cjbh from bd_zzcj where cjmc = @param1)))
GO
问题点数:20、回复次数:7Top
1 楼zhaoanle(zhao)回复于 2005-12-31 10:45:19 得分 1
表名为参数应该要
exec('select * from '+ @tname)Top
2 楼newmcz(newmcz)回复于 2005-12-31 10:53:20 得分 1
select * from @tname exec getTbname @param1,@param2
写法不对,你看看联机帮助,"使用返回代码返回数据"Top
3 楼yesjoy(卫卫)回复于 2005-12-31 10:53:39 得分 0
问题是如何把exec getTbname @param1,@param2执行后取得的表名赋值给变量@tname呢Top
4 楼libin_ftsafe(子陌红尘:TS for Banking Card)回复于 2005-12-31 10:57:14 得分 13
CREATE procedure testGetTbname
@param1 varchar(100),@param2 varchar(100)
as
begin
declare @tname varchar(100)
create table #T(tname varchar(100))
insert into #T exec getTbname @param1,@param2
declare t_cursor cursor for select tname from #t
open t_cursor
fetch next from t_cursor into @tname
while @@fetch_status=0
begin
exec('select * from '+@tname)
fetch next from t_cursor into @tname
end
close t_cursor
deallocate t_cursor
end
GOTop
5 楼lsqkeke(可可)回复于 2005-12-31 10:57:46 得分 2
存储过程getTbname返回的是一个记录集,而不是表名!
select * from @tname exec getTbname @param1,@param2
改为:select * from (exec getTbname @param1,@param2)a
Top
6 楼wangtiecheng(不知不为过,不学就是错!)回复于 2005-12-31 11:05:28 得分 3
1、可以使用输出参数
create procedure sp_test
(
@p1 varchar(100),
@p2 varchar(200),
@p3 varchar(100) output
)
as
......
set @p3=...
......
go
--调用
declare @Para1 varchar(100), @Para2 varchar(100), @ParaOut varchar(100)
exec sp_test @Para1, @Para2, @ParaOut output
select @ParaOut ---可以使用@ParaOut的值
--2、使用存储过程返回的表数据
create table #tp(Tname varchar(100))
insert into #tp
exec 存储过程名 参数列表
select * from #tp ---#tp中有存储过程返回的数据
Top
7 楼yesjoy(卫卫)回复于 2005-12-31 11:05:58 得分 0
libin_ftsafe(子陌红尘)真厉害 终于把问题给解决啦 ^_^ 真的由衷感谢啊
就是要这样的结果啊 结贴啦Top




