存储过程中,如何将变量直接作为表名(200分)(0分)

  • 主题发起人 主题发起人 zwhc
  • 开始时间 开始时间
Z

zwhc

Unregistered / Unconfirmed
GUEST, unregistred user!
下表 table1 的 etTableName 里的数据为数据库中其它表的名字,

tabel1
etTableName etCode
tableABC et01
tableXYZ et02
... ...

已知 etCode 如何查询 tableABC 中的值?

当然可以这样:
=============================
Create procedure P_abc
@strEtCode varchar(20)
As

declare
@strSQL varchar(1000)
@strTN varchar(32) --TableName

set @strTN = (select etTableName from talbe1 where etCode = @strEtCode)
set @strSQL = 'select * from ' + @strTN
exec (@strSQL)
=============================
但是实际上该存储过程参数很多,这样写调试较困难。

请问,如何将变量直接作为表名?即如何直接书写类似
select * from @strTN
的语句。

为防止没有答案而无法收回分数,先不给分。(没办法,实在穷 :)
如有答案,定将 200 分奉上。
 
BTW:
我用的是 M$ SQL 7.0
 
如此:

Create procedure P_abc
@strEtCode varchar(20)
As
select * from
(select etTableName from talbe1 where etCode = @strEtCode)

是否可行? 不用很复杂吧。
 
<font color = red>Server: Msg 170, Level 15, State 1, Line 2</font>
Line 2: Incorrect syntax near ')'.


==================
M$ SQL Sever 的《Query Analyzer》的返回信息。第一行原来就是红色的。

==================

如果用

select * from
(select etTableName from talbe1 where etCode = @strEtCode) viewA

返回 etTableName 的值,显然不符我的要示。

>>(select etTableName from talbe1 where etCode = @strEtCode) viewA
是视图
 
我也碰到了这个问题,不过对于单个的Select语句,用Delphi的Query控件倒是可以达到
这个目的,因为Query的Sql属性只有输入一个字符串就可以了。
但在Sql 7的存储过程中用变量的话,我试了很多次,包括以上的几种办法,都不行,
似乎from子句的表名应该是一个确定的表名
 
肯定有人回答了类似的问题,请在C/S主题中查阅
 
>>肯定有人回答了类似的问题,请在C/S主题中查阅

我没找到。 :(((
 
我有办法!
在存储过程中:

EXEC( "SELECT * FROM " + @TABLENAME )

保证正确!
 
2 Aloney:
我用的就是你说的方法。
>>set @strTN = (select etTableName from talbe1 where etCode = @strEtCode)
>>set @strSQL = 'select * from ' + @strTN
>>exec (@strSQL)

我想知道的是:
>>如何直接书写类似
>>select * from @strTN
>>的语句。


 
接受答案了.
 
后退
顶部