请问sql中用什么符号做宏代换(30分)

  • 主题发起人 主题发起人 winamp皮肤
  • 开始时间 开始时间
W

winamp皮肤

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个存储过程中有一个存储参数(@_class)用来指定要选择数据的来源表
如:
select * from @_class
这样就不行,听人说要用宏代换,但又找不到宏代换的符号,请大家帮忙解决一下
 
可以用function
returns @emptable
 
上面的大侠,请问怎么用,能详细点吗?我还是初学者
 
不会吧,难道没人知道?反正只要能查出来怎么都行啊
 
不是什么宏替换,用动态sql不就行了.
declare @str varchar(100)
set @str = 'select * from ' + @_class //@_class是你传进来的参数
exec @str
 
上面的正确吧,原来我理解错误
 
不明白你的意思,你是不是想用一個
參數替代表名,在存儲過程中進行查詢。
declare @df varchar(10)
declare @str varchar(200)
select @df='table1' //表名
select @str='select * from '+@df
exec(@str)
將@df定義成輸入參數,先賦值。
可能我理解錯你的意思。
 
我还是不行,我把东西贴出来吧。
CREATE PROCEDURE huizong
@_a int,
@_year char(4),
@_month char(2),
@_class varchar(10)
AS
declare @_classx char(500)
set @_classx='sum(线停)线停,sum(断停处理)断停处理,sum(断边)断边,sum(满锭停)满锭停,sum(其它)其它,sum(停止次数)停止次数,sum(线停时间)线停时间,sum(断停处理时间)断停处理时间,sum(断边时间)断边时间,sum(满锭停时间)满锭停时间,sum(其它时间)其它时间,sum(停止时间)停止时间,sum(运转率)运转率,sum(产量)产量,sum(工作时间) from' +@_class+'where left(日期,6)=(@_year+@_month) group by '
if @_a=1
set @_classx ='select 机号,'+@_classx +'机号'
if @_a=2
set @_classx ='select 班次,'+@_classx +'班次'
if @_a=3
set @_classx ='select 组号,'+@_classx +'组号'
if @_a=4
set @_classx ='select 机号,'+@_classx +'机号 order by sum(产量)'
if @_a=5
set @_classx ='select 机号,'+@_classx +'组号 order by sum(运转率)'
exec(@_classx)
GO


我在查询分析器中打入
exec 1,'2002','05','class02'
提示‘关键字left出错’
 
我本来的存储过程是这样的,但苦于我的表不是每次都是class的,所以希望能把select语句
中的class用别的东西代一下,请各位帮一下了

CREATE PROCEDURE huizong
@_a int,
@_year char(4),
@_month char(2)
AS
if @_a=1
select 机号,sum(线停)线停,sum(断停处理)断停处理,sum(断边)断边,sum(满锭停)满锭停,sum(其它)其它,sum(停止次数)停止次数,sum(线停时间)线停时间,sum(断停处理时间)断停处理时间,sum(断边时间)断边时间,sum(满锭停时间)满锭停时间,sum(其它时间)其它时间,sum(停止时间)停止时间,sum(运转率)运转率,sum(产量)产量,sum(工作时间) from class where left(日期,6)=(@_year+@_month) group by 机号
if @_a=2
select 班次,sum(线停)线停,sum(断停处理)断停处理,sum(断边)断边,sum(满锭停)满锭停,sum(其它)其它,sum(停止次数)停止次数,sum(线停时间)线停时间,sum(断停处理时间)断停处理时间,sum(断边时间)断边时间,sum(满锭停时间)满锭停时间,sum(其它时间)其它时间,sum(停止时间)停止时间,sum(运转率)运转率,sum(产量)产量,sum(工作时间) from class where left(日期,6)=(@_year+@_month) group by 班次
if @_a=3
select 组号,sum(线停)线停,sum(断停处理)断停处理,sum(断边)断边,sum(满锭停)满锭停,sum(其它)其它,sum(停止次数)停止次数,sum(线停时间)线停时间,sum(断停处理时间)断停处理时间,sum(断边时间)断边时间,sum(满锭停时间)满锭停时间,sum(其它时间)其它时间,sum(停止时间)停止时间,sum(运转率)运转率,sum(产量)产量,sum(工作时间) from class where left(日期,6)=(@_year+@_month) group by 组号
if @_a=4
select 机号,sum(线停)线停,sum(断停处理)断停处理,sum(断边)断边,sum(满锭停)满锭停,sum(其它)其它,sum(停止次数)停止次数,sum(线停时间)线停时间,sum(断停处理时间)断停处理时间,sum(断边时间)断边时间,sum(满锭停时间)满锭停时间,sum(其它时间)其它时间,sum(停止时间)停止时间,sum(运转率)运转率,sum(产量)产量,sum(工作时间) from class where left(日期,6)=(@_year+@_month) group by 机号 order by sum(产量)
if @_a=5
select 机号,sum(线停)线停,sum(断停处理)断停处理,sum(断边)断边,sum(满锭停)满锭停,sum(其它)其它,sum(停止次数)停止次数,sum(线停时间)线停时间,sum(断停处理时间)断停处理时间,sum(断边时间)断边时间,sum(满锭停时间)满锭停时间,sum(其它时间)其它时间,sum(停止时间)停止时间,sum(运转率)运转率,sum(产量)产量,sum(工作时间) from class where left(日期,6)=(@_year+@_month) group by 机号 order by sum(运转率)
GO
 
如果你没有打错的话,那应该是from后面和where前面没有空格,
 
呵呵,刚才没加空格,现在加了,但还是出错:
必须声明变量 '@_year'
但这个存储参数我声明了啊,怎么回事呢?
 
从from后面开始改成如下:
...from ' + @_class+ ' where left(日期,6)=(' + @_year + @_month + ') group by '
 
接受答案了.
 
后退
顶部