【发布时间】:2016-01-11 16:29:24
【问题描述】:
我有一个 SQL 查询,它比较 2 个表以检查登录时间和计划是否关闭,以使用 int 值填充第三个表。我得到了它的工作,但我正在尝试向 select 命令添加其他变体。
这是有效的代码:
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 查询来附加到此命令。
【问题讨论】:
-
6:00AM是一个奇怪的字段名称。这真的是该领域的名称吗? -
@ConradFrix,
6:00AM不用作字段名,它用于between -
@HoneyBadger 在早上 6:00 左右注意到
[]。由于它连接到 sql 字符串,我希望它被视为字段名称而不是值 -
这里不需要产生动态 SQL 的开销和风险,您可以将日期作为普通 SELECT 命令的参数。
-
如果你直接在 SSMS 中运行,你会收到想要的结果吗?
标签: sql sql-server tsql case between