В настоящее время у меня есть запрос, который вытащит кучу информации из моей базы данных на основе любого состояния where
, которое я хочу использовать.Несколько условных Где предложение
declare @CaseNum char(7),
@ImportId char,
@FormatId char,
@SessionId char(5)
set @CaseNum = '' --I can place the value that I want to search by in here
set @ImportId = ''
set @FormatId = ''
set @SessionId = ''
--------------------
query in here
--------------------
where
gr.[CaseNum] = @CaseNum --currently I have to comment the ones I'm not using out
--im.[ImportId] = @ImportId
--fr.[FormatId] = @FormatId
--se.[SessionId] = @SessionId
Я хочу, чтобы быть в состоянии взять комментарий часть, и просто отображает все строки, если параметр = «»
Например, если я использую set @CaseNum = '1234567'
тогда он будет искать по этому параметру, и если я использую @FormatId = '12'
будет искать тот.
Я пробовал использовать следующие и несколько других попыток, но я не получаю никуда быстро.
where
gr.[CaseNum] = '%' + @CaseNum + '%'
and im.[ImportId] = '%' + @ImportId + '%'
and fr.[FormatId] = '%' + @FormatId + '%'
and se.[SessionId] = '%' + @SessionId + '%'
Вы можете использовать что-то вроде 'where (gr. [CaseNum] = @CaseNum или @CaseNum NULL) и ...', но производительность будет страдать, если вы повторно используете план выполнения. Повторная компиляция запроса для каждого набора параметров поможет, или построение запроса на флае и выполнение результирующего динамического SQL. Посмотрите на некоторые «связанные» сообщения SO, показанные в правой части страницы, и узнайте немного больше о «динамическом SQL». – HABO