【问题标题】:SQL SELECT, CASE, BETWEEN INTO statementsSQL SELECT、CASE、BETWEEN INTO 语句
【发布时间】: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


【解决方案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 字符串与按原样执行 SELECT 语句是否有理由?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-05
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 2011-09-05
    • 2021-01-19
    相关资源
    最近更新 更多