我有一个查询,我必须使用case语句进行过滤。这似乎是越来越执行任何情况下条件:在sql中写入else case语句时出错error
declare @filterValue varchar(50)='test'
declare @filterCol varchar(50)='DayOfWeekAbr'
select * from datetable where 1=1 and (
case when @filterCol='' then DayOfWeekAbr
when @filterCol='' then [WeekOfYear]
end = @filterValue
OR case when ISNULL(@filterCol,'')='' then 1
end =1)
四处错误:
Msg 245, Level 16, State 1, Line 5 Conversion failed when converting the varchar value 'test' to data type int.
现在的错误是因为列WEEKOFYEAR为int。但是我的疑问是,如果案件统计不符合它执行它的条件?并解决如何做到这一点。
当下面的查询得到同样的错误,告诉我,我错了实现:
SELECT
[threat_feed].[Id]
, [threat_feed].[Name]
, [threat_feed].[Url]
, [threat_feed].[RefreshRate]
, [threat_feed].[ConfidenceLevel]
, [threat_feed].[Severity]
, [threat_feed].[Type]
, [threat_feed].[Source]
, [threat_feed].[Description]
, [threat_feed].[Visibility]
, [threat_feed].[Integration]
, [threat_feed].[IntegrationOptions]
, [threat_feed].[CreatedBy]
, [threat_feed].[CreatedOn]
, [threat_feed].[ModifiedBy]
, [threat_feed].[ModifiedOn]
, [threat_feed].[IsDeleted]
, COUNT(*) OVER() AS [TOTALROWS]
FROM [dbo].[ThreatFeed] [threat_feed]
WHERE [threat_feed].[IsDeleted] IN (0, @IncludeDeleted) AND (
(@filterCol = 'Name' and [threat_feed].[Name] = @filterValue) or
(@filterCol = 'Source' and [threat_feed].[Source] = @filterValue) or
(@filterCol = 'URL' and [threat_feed].[Url] = @filterValue) or
(@filterCol = 'RefreshRate' and [threat_feed].[RefreshRate] = @filterValue) or
(@filterCol = 'ConfidenceLevel' and [threat_feed].[ConfidenceLevel] = @filterValue) or
(@filterCol = 'Severity' and [threat_feed].[Severity] = @filterValue) or
(@filterCol = 'Visibility' and [threat_feed].[Visibility] = @filterValue) or
(isnull(@filterCol,'')='')
)
这里confidencelevel,serverity和知名度不为varchar
您的'CASE'语句中的逻辑没有任何意义。 –
是[WeekOfYear]其实是一个int?你似乎正在比较一个字符串到一个int - 可能不会与CASE做这样的 – Cato
哦,你知道吗?无论如何 - 为什么发布错误,如果你知道它是什么?为什么不解决你的错误,并看看它是怎么回事? – Cato