declare @temp varchar(20)
declare @name varchar(20)
set @name = 'John'
set @temp = 'e'
select * from TableA
where case when @temp = 'e' then [em_name]
case when @temp = 'c' then [company_name]
end
= @name
此查询给出了错误(where子句中的非布尔表达式)。
请解释此查询中的错误,如何在没有动态sql的情况下实现此目的。
所以,当我提供@temp = 'C'
时,它应该搜索[company_name] = @name
。并有一长列@temp values(employee name, company name, city name, state name, supervisor name etc)
。
答案 0 :(得分:6)
您发布的剪辑中存在语法错误:
where case when @temp = 'e' then [em_name]
case when @temp = 'c' then [company_name]
end
= @name
应该是:
WHERE CASE WHEN @temp = 'e' THEN em_name
WHEN @temp = 'c' THEN company_name
END = @name
注意现在只有一个CASE关键字。这是更常见的语法(为了完整性):
DECLARE @temp VARCHAR(20)
DECLARE @name VARCHAR(20)
SET @name = 'John'
SET @temp = 'e'
SELECT *
FROM TableA
WHERE (@temp = 'e' AND [em_name] = @name)
OR (@temp = 'c' AND [company_name] = @name)
答案 1 :(得分:2)
SELECT *
FROM TableA
WHERE (@temp = 'e' AND [em_name] = @name) OR (@temp = 'c' AND [company_name] = @name)