Динамическая хранимая процедура T-SQL в предложении where - PullRequest
0 голосов
/ 12 мая 2019

Мне нужно написать пример хранимой процедуры с двумя параметрами, подобными этим:

sp_list_customers @locationid int, @category varchar

Пользователи могут передать @locationid = 0, чтобы составить список клиентов во ВСЕХ местах или с определенным ID местоположения. Также они могут передавать пустую или пустую строку в p, чтобы замедлить ВСЕ категории.

Вот мой код SQL:

create procedure ...
as 
    select * 
    from customers
    where locationid = (case 
                           when isnull(@locationid, 0) = 0 
                              then locationid 
                              else @locationid  
                        end)
      and category = (case 
                         when isnull(@category, '') = '' 
                            then category 
                            else @category 
                      end)

Однако этот тип кодов работает слишком медленно с большим количеством параметров

Я искал способы решения проблемы, а затем обнаружил, что динамический T-SQL является приемлемым решением. Но перенести все мои хранимые процедуры - дело кошмарное и подверженное ошибкам.

Мне нужно написать другую пользовательскую функцию, чтобы помочь мне. Каков наилучший пользовательский код функции для этого?

Спасибо

1 Ответ

0 голосов
/ 12 мая 2019

Попробуйте, если приведенный ниже упрощенный код работает лучше ...

create procedure ... as select * from customers where (nullif(@locationid,'') is null
  or locationid = @locationid)
 and (   nullif(@category,'') is null or category = @category)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...