如何在使用存储过程选择表
是这样的
假设我的数据库有1mon,2mon,3mon一直到12mon 一共12张用户资料表,代表每个月客户的状态,每张表的字段都是相同的,其中有个字段为 serv_state ,如果serv_state 的值为 F1R 则表示拆机,比如,我要得到1月客户的拆机数
那么,我建立了一个存储过程:
CREATE PROCEDURE chaiji
as
select acc_nbr,serv_name,serv_state
from 1mon
where
serv_state= 'F1R '
----------------------------
但如果我要得到,其他月份的拆机,我岂不是要重复的修改所需要查询的表名,然后再执行,有没有什么办法,使用存储过程运行之后可选择表名,然后,即可出现该月拆机的结果?
好傻的问题,见笑了
------解决方案--------------------這樣呢?
DECLARE @TABLENAME NVARCHAR(100)
SET @TABLENAME = '1mon '
EXEC( 'select acc_nbr,serv_name,serv_state
from [ ' + @TABLENAME + '] where serv_state= ' 'F1R ' ' ')
------解决方案--------------------存储过程里传入个月份参数
CREATE PROCEDURE chaiji
@mth int
as
if @mth > 12 or @mth <1 return
declare @s varchar(300)
set @s= 'select acc_nbr,serv_name,serv_state
from ' +cast(@mth as varchar)+ 'mon where serv_state= ' 'F1R ' ' '
------解决方案--------------------ncufunk(大叔) ( ) 信誉:100 Blog 2007-03-31 13:09:51 得分: 0
楼上的,该存储过程语法似乎没问题
但不需要执行 exec chaiji 么?
直接 exec(@s)?
如果 exec chaiji ,则mth 没有提供参数啊
如果exec(@s)也会 出现『必须声明变量 '@s '。』的出错提示。。
------------
是他沒寫完整,分開寫了。
CREATE PROCEDURE chaiji
@mth int
as
if @mth > 12 or @mth <1 return
declare @s varchar(300)
set @s= 'select acc_nbr,serv_name,serv_state
from ' +cast(@mth as varchar)+ 'mon where serv_state= ' 'F1R ' ' '
exec(@S)
GO
--然後你調用存儲過程的時候,就這麼用
Exec chaiji 1