周期性排班表NormalDuty 如下:
Name week1 week2 week3 week4 week5 week6 week7 
A     1     0     0     1      1     1    0
B     0     1     1     1      1     1    0
..
其中week1的值为1,表示有班,0表示没班
我现在要写一存储过程,得到当天的排班情况;
如下:CREATE PROCEDURE GetTodayOnDuty AS
declare @Week char(1)
set datefirst 1
select  @Week=datepart(weekday,getdate())insert into DayOnDuty(OnDutyDate,Name) select Convert(char(10),getdate(),120) as OnDutyDate,Name from
NormalDuty where
'Week'+@Week=1
GO
运行后得到提示:
将 varchar 值 'Week1' 转换为数据类型为 int 的列时发生语法错误。
请问该如何改?

解决方案 »

  1.   

    CREATE PROCEDURE GetTodayOnDuty AS
    declare @Week char(1)
    set datefirst 1
    select  @Week=datepart(weekday,getdate())declare @sql varchar(2000)
    set @sql='insert into DayOnDuty(OnDutyDate,Name) select Convert(char(10),getdate(),120) as OnDutyDate,Name from NormalDuty where
    Week'+cast(@Week as varchar)+'=1'
    exec(@sql)
    GO
      

  2.   

    CREATE PROCEDURE GetTodayOnDuty AS
    declare @Week char(1)
    set datefirst 1
    select  @Week=datepart(weekday,getdate())declare @sql varchar(2000)
    set @sql='insert into DayOnDuty(OnDutyDate,Name) select Convert(char(10),getdate(),120) as OnDutyDate,Name from NormalDuty where
    Week'+char(39)+@Week +char(39)+'=1'
    exec(@sql)