2016-01-11 188 views
0

我有一个SQL查询比较2个表来检查登录时间和日程表是否关闭,以便用int值填充第三个表。我得到它的工作,但我试图添加其他变化到选择命令。SQL SELECT,CASE,BETWEEN INTO语句

这里是工作的代码:

DECLARE @sqlSelect varchar(max) 
SET @sqlSelect = 'SELECT loginlogout.[Agent Name], case when loginlogout.[Login Time] = Schedules$.StartTime then 0 else 1 end as LoginInc into Integers FROM loginlogout JOIN Schedules$ on loginlogout.[Agent Name] = Schedules$.AgentName' 

EXEC(@sqlSelect) 
GO 

什么我想补充的是这样的:

DECLARE @six varchar(max) 
DECLARE @sixo varchar(max) 
DECLARE @sixnerdy varchar(max) 
DECLARE @sqlSelect varchar(max) 
SET @six = '[6:00AM]' 
SET @sixo = '[6:05AM]' 
SET @sixnerdy = '[6:30AM]' 
SET @sqlSelect = 'SELECT loginlogout.[Agent Name], case when loginlogout.[Login Time] = Schedules$.StartTime then 0 when [Login Time] BETWEEN '+ @sixo +' and '+ @sixnerdy +' then 1 else 1 end as LoginInc into Integers FROM loginlogout JOIN Schedules$ on loginlogout.[Agent Name] = Schedules$.AgentName' 

EXEC(@sqlSelect) 
GO 

当运行这个查询,我得到错误味精207无效列名。因此我尝试过:

SET @sqlSelect = 'SELECT loginlogout.[Agent Name], case when loginlogout.[Login Time] = Schedules$.StartTime then 0 when [Login Time] BETWEEN '+ @sixo +' and '+ @sixnerdy +' then 1 else 1 end as LoginInc into Integers' 

删除FROM语句。这表示该命令运行,但整数表永远不会创建。这可以在1个SQL命令中完成吗?此外,我还需要添加约4个以上的BETWEEN查询来加强此命令。

+1

'6:00 AM'是一个奇怪的字段名称。这真的是这个领域的名字吗? –

+0

@ConradFrix,'6:00 AM'不用作字段名称,它在'between'之间使用' – HoneyBadger

+4

@HoneyBadger注意在6:00 AM前后的'[]'。由于它连接到SQL字符串,我希望它被视为字段名称而不是值 –

回答

1

由于时间未包含在单引号中,初看一眼就会质疑没有问题。有这样的工作吗?

DECLARE @six varchar(max) 
DECLARE @sixo varchar(max) 
DECLARE @sixnerdy varchar(max) 
DECLARE @sqlSelect varchar(max) 
SET @six = '''6:00AM''' 
SET @sixo = '''6:05AM''' 
SET @sixnerdy = '''6:30AM''' 
SET @sqlSelect = 'SELECT loginlogout.[Agent Name], case when loginlogout.[Login Time] = Schedules$.StartTime then 0 when [Login Time] BETWEEN '+ @sixo +' and '+ @sixnerdy +' then 1 else 1 end as LoginInc into Integers FROM loginlogout JOIN Schedules$ on loginlogout.[Agent Name] = Schedules$.AgentName' 

EXEC(@sqlSelect) 
GO 

虽然这一切似乎仍然有点笨拙。是否有理由EXEC一个SQL字符串vs只是按原样执行SELECT声明?