如何更正我的 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()
我有以下查询失败 运行 说明 "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()