我不清楚where子句中这个case语句发生了什么。设置:
CREATE TABLE [dbo].[Cars](
[Car] [varchar](20) NULL,
[Fast] [varchar](10) NULL
) ON [PRIMARY]
INSERT [dbo].[Cars] ([Car], [Fast]) VALUES (N'Ford', N'No')
INSERT [dbo].[Cars] ([Car], [Fast]) VALUES (N'Holden', N'Yes')
INSERT [dbo].[Cars] ([Car], [Fast]) VALUES (N'Mazda', N'Not Really')
INSERT [dbo].[Cars] ([Car], [Fast]) VALUES (N'Toyota', N'Yes')
和查询:
declare @Include_List varchar(100) = (select 'Get fast cars, Get slow cars')
SELECT Car,Fast
FROM Cars
where case
when Fast = 'Yes' and CHARINDEX('Get fast cars',@Include_List) > 0 then 1
when Fast = 'No' and CHARINDEX('Get slow cars',@Include_List) > 0 then 1
else 0
end = 1
我期待第一个when
表达式匹配快车,然后退出case语句。然而,第二个when
表达式也经过测试,并与慢车相匹配。结果集包含快速和慢速汽车。
不应该只返回第一次检查的结果吗?
答案 0 :(得分:1)
SELECT测试汽车的每一条记录。
如果您只想要快车,请尝试声明@Include_list,如下所示:
DECLARE @Include_List VARCHAR(100) = (SELECT 'Get fast cars')