我怎样才能纠正我的案例陈述?

时间:2015-09-25 11:11:33

标签: sql-server tsql case where

我有以下查询无法运行说明“历史记录查询必须包含至少一个有效的标记名”。这个让我很难过。

    DECLARE @tag varchar(255),
        @sqlstring varchar(4000)
SET @tag = 'rm01'

SELECT
  value
FROM StringHistory e
INNER JOIN (SELECT
  badge,
  lastname AS name
FROM [LOCALSERVER].[my_log].[dbo].[local_Operators]
WHERE type = '''op''') u
  ON e.value = u.badge
  AND e.TagName = 'first' + (CASE
    WHEN @tag = 'rm01' THEN '03'
  END) + '_dat_badge'
  AND DateTime >= DATEADD(HH, -12, GETDATE())
  AND DateTime <= GETDATE()

我假设它与案例陈述和单引号有关?因为如果我删除case语句并只使用('03'),查询就会运行。

谢谢

1 个答案:

答案 0 :(得分:0)

您的CASE - 表达式未指定ELSE。这将导致返回NULL,这将导致'first' + NULL + '_dat_badge',而NULL又为ELSE。 我相信将SELECT value FROM StringHistory e INNER JOIN (SELECT badge, lastname AS name FROM [LOCALSERVER].[my_log].[dbo].[local_Operators] WHERE type = '''op''') u ON e.value = u.badge AND e.TagName = 'first' + (CASE WHEN @tag = 'rm01' THEN '03' ELSE '' END) + '_dat_badge' AND DateTime >= DATEADD(HH, -12, GETDATE()) AND DateTime <= GETDATE() 添加为空字符串将解决错误。

resources :assesments, default: {action: :index }