У меня есть запрос, в котором я должен выполнять фильтрацию с использованием case case. Кажется, каждое условие случай становится выполнено:Ошибка при записи else case case в sql
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 является внутр. Но я сомневаюсь, что если статус statrement не соответствует условию, почему он его выполняет? И решение, как это сделать.
При реализации в запросе ниже получать ту же ошибку скажите мне, где я не прав:
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' заявление не имеет никакого смысла. –
is [WeekOfYear] на самом деле int? вы, кажется, сравниваете строку с int - возможно, не с CASE как таковой – Cato
oh, вы знаете, что так или иначе - зачем выставляете сообщение об ошибке, если знаете, что это такое? Почему бы не исправить вашу ошибку и посмотреть, как это происходит? – Cato