Rag*_*hav 1 sql-server sql-server-2008
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
Run Code Online (Sandbox Code Playgroud)
这个查询给了我错误(where子句中的非布尔表达式).
请解释此查询中的错误,如何在没有动态sql的情况下实现此目的.
所以,当我给予@temp = 'C'它然后它应该搜索[company_name] = @name.并列出了一长串@temp values(employee name, company name, city name, state name, supervisor name etc).
您发布的剪辑中存在语法错误:
where case when @temp = 'e' then [em_name]
case when @temp = 'c' then [company_name]
end
= @name
Run Code Online (Sandbox Code Playgroud)
应该:
WHERE CASE WHEN @temp = 'e' THEN em_name
WHEN @temp = 'c' THEN company_name
END = @name
Run Code Online (Sandbox Code Playgroud)
请注意,现在只有一个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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3857 次 |
| 最近记录: |