0

У меня есть хранимая процедура, где я обрабатываю часть столбца, если параметр не равен нулю.изменить значение в isnull

Проблема заключается в том, что значение, которое я ищу, смешивается в длинной строке других значений. Вот пример того, что строка может выглядеть следующим образом:

'...value=153139,example=xyz,param=15,morestuff=otherthings...' //ignore the actual names, it's just examples for SO 

Так что это не будет работать, потому что потенциально может выбрать неправильную вещь (value=153139 вызовет матч, если @param = '15'):

WHERE 
    [column] LIKE ISNULL(@param, [column]) 

Это Wouldn» т работы либо:

WHERE 
    [column] LIKE '%param=' + ISNULL(@param, [column]) + '%' 

идеальным для меня было бы что-то вроде ISNULL(check_expression, replacement_if_null, replecement_if_not_null), но, насколько мне известно, что не существует ..

P.S. Я знаю, что способ хранения информации не является оптимальным, но это то, что использует система, и я должен работать с ним =/Так нет комментариев вроде «Вы должны разбить столбец так, чтобы он содержал только одно значение», пожалуйста,

ответ

1

вы попробуйте тематическое заявление:

case when check_expression is null then replacement_if_null else replecement_if_not_null end 

или

[column] LIKE '%param=' + ISNULL(@param, [column]) + ',%' -- comma added before the last % 

Cast @param, если это необходимо, и убедитесь, что вы не скрыли пространство вокруг значений (RTrim или LTRIM может для их удаления)

+0

Рассмотрение дела выглядит хорошо, я попробую. Другой не будет работать, потому что если @param имеет значение null, он попытается сопоставить '[column]' с ''% param =' + [column] + '%'' –

+0

Почему бы не заменить [column] на что-то еще в ISNULL (@param, [column]) ??? –

+0

Я пошел за вашим первым предложением, и он отлично работает =) Спасибо большое! –