如何更正我的 where case 语句?

How can I correct my where case statement?

我有以下查询失败 运行 说明 "History queries must contain at least one valid tagname"。这个让我难住了。

    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 语句和单引号有关?因为如果我删除 case 语句并只使用 ('03') 查询 运行s.

谢谢

您的 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()