我正在尝试从我们的出勤数据库(SQL Server 2008)中提取上一期迟到的学生。期间考勤存储在ATT.A1, ATT.A2 ... ATT.A7
. 我想安排一个从早上 9 点开始每小时运行的作业,并拉动迟到的学生,但我无法弄清楚代码。
这是我的代码(伪代码):
Declare @Period varchar(6)
Set @Period = 'att.a' + Cast((DATENAME(hour, GETDATE()) - 8) as varchar(1))
Select SC, SN, DT, @Period as Period, ATT.A1
From ATT
Where SC = '9' and @Period = 'T'
and DT = DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
当我使用它时,我没有得到任何结果。如果我@Period = 'T'
从 Where 子句中删除,我会得到以下信息:
9 5177 2012-08-24 00:00:00.000 att.a1 T
9 5211 2012-08-24 00:00:00.000 att.a1
9 5225 2012-08-24 00:00:00.000 att.a1 T
9 5229 2012-08-24 00:00:00.000 att.a1 T
9 5235 2012-08-24 00:00:00.000 att.a1 V
9 5242 2012-08-24 00:00:00.000 att.a1 T
9 5268 2012-08-24 00:00:00.000 att.a1
我知道当我@Period
在SELECT
语句和WHERE
子句中使用时,它使用的是文字字符串值@Period
,但我需要它使用@Period
as的值Table.Column
。
因此,在 9:00 它将选择 from ATT.A1
, 10:00 from ATT.A2
... 15:00 fromATT.A7
并且每次比较 ATT.A# = 'T'
我希望这很清楚。
谢谢,安东尼