存储过程中的表名是否可以用变量代替的说?(50分)

  • 主题发起人 主题发起人 ningliu
  • 开始时间 开始时间
N

ningliu

Unregistered / Unconfirmed
GUEST, unregistred user!
SQL Server 7.0的存储过程中,我希望使用变量来制定过程中操作的某个表
我看了看好像不可以这样,因为创建好一个存储过程之后,编译时要检查所有的
对象是否存在,比如说表的一个字段等等.
是不是真的不能这样?我挑选个表的可都是结构相同的,但表的数量不定.
有信息的说说.
 
不行,创建存储过程的时候,系统自动进行有效性检查
即检查表的存在与合法性
我为这个问题也苦恼过,每年12月,我不得不创建了
12份遗墨一样的表,当然表名不一样
sql server7.0我没用过,想必不行
>表的数量不定
建足够数量的表吧,反正空表对系统效率没什么大影响

 
天哪!难道真的不幸了吗???????
 
完全可以的.
用 Execute函数 , 它可以执行一段以字符串形式的Translation SQL语句
例如在存储过程中:
EXEC ('DROP TABLE ' + @tablename)

你查一下SQl server 7.0 的Execute的在线帮助吧!!

 
SeaSky: 呵呵, create, drop都没问题, 关键是select,insert,update是不行的.
 
说的就是这个,需要select,update,................
 
所以才说不行. 用程序贝, 没问题!
 
遇到过相同的问题,绕道解决了,还是用程序
在此听听,说不定会拨开云雾见青天
 
如果非要用sp(确实效率高些), 可以动态创建个sp, 执行后再删除了就行了.
 
> SeaSky: 呵呵, create, drop都没问题, 关键是select,insert,update是不行的.

cytown:
不会吧, 我在存储过程中使用成功过. 动态生成SQL 语句, 用
execute( @SQL )执行. 怎么不行, 不过我是在SQL 6.5 上用的,
7.0没试过, 有问题吗?
 
hehe, 谁让你用变量代替sp的名字了, 自然不行了.
query1.sql.add('create procedure '+spname); //spname是string
query1.sql.add('as.........');
....
query1.execsql;
query1.sql.clear;
query1.sql.add('exec '+spanem);
query1.active:=true; //or query1.execsql, subject to ur sp return value;
 
我在SQL 7.0 实验成功,
设某存储过程如下定义:

CREATE PROCEDURE sp_test
@tablename varchar(255)
AS
begin

execute( 'select * from ' + @tablename );

end


在SQL Explorer中执行(Delphi中类似)

execute sp_test 'dbo.syslogins'

返回正确结果.


 
关键是查阅SQl server 的help 文件, 其中Execute( )函数的用法.
在存储过程的create过程中, sqlserver不会对Execute( )函数内的字符
做句法分析判断, 只是在运行时才进行分析处理, 这样有利于在存储过程中
动态的处理SQl 语句.
 
SeaSky说的有理,我试了试,应没问题.
 
吃完了不给钱?
现在的年轻人啊。。。
 
后退
顶部