Удалить concat и функцию IIF для SQL Server 2008 - PullRequest
0 голосов
/ 16 января 2020

Как преобразовать мой оператор SQL Server 2012, чтобы он был совместим с SQL Server 2008?

Я знаю, что SQL Server 2008 больше не поддерживается Microsoft, но один из наших клиентов все еще работает

Это мой запрос SQL Server 2012:

IIF(@Filter = '', 1, 0) + CHARINDEX(CONCAT(',', Group_ID, ','), CONCAT(',', @Filter + ',')) > 0 

Один из наших клиентов работает на SQL Server 2008, а IIF и CONCAT не поддерживаются поэтому я хочу изменить приведенный выше запрос:

То, что я пытался сделать так:

Where @Filter = case when @Filter= '' then 1 + CharIndex(',' + convert(varchar(100),Group_ID) +',',',' + @Filter+',') 

                                            when @Filter <> '' then 0 + CharIndex(',' + convert(varchar(100),Group_ID) +',',',' + @Filter+',')
                         END

Не выдает никакой ошибки, но мой вывод пуст.

Может кто-то, пожалуйста, предложите, что нужно сделать, пожалуйста

Ответы [ 3 ]

2 голосов
/ 16 января 2020

Существующее условие успешно выполняется, если @Filter не является пустой строкой или group_id принадлежит списку CSV, который хранится в @Filter.

Я бы express это с OR и LIKE; Я считаю, что таким образом легче понять намерение без использования charindex() (но это также вопрос вкуса):

WHERE
    @Filter = ''
    OR ',' + @Filter + ',' LIKE '%,' + convert(varchar(100),Group_ID) +',%',
0 голосов
/ 16 января 2020

Вы должны использовать синтаксис WHEN CASE вместо IIF и агрегат "+" вместо CONCAT

0 голосов
/ 16 января 2020

Это будет сделано так же: 2008

case when case when @Filter= '' then 1 else 0 end +
    CharIndex(','+Group_ID+',',','+@Filter+',') > 0 

если эквивалентно вашему 2012

IIF(@Filter = '', 1, 0) + 
CHARINDEX(CONCAT(',', Group_ID, ','), CONCAT(',', @Filter + ',')) > 0 
...