Есть ли альтернативный способ создания хранимой процедуры без помещения всего запроса в одну длинную строку, если критерии предложения WWHERE могут отличаться.
Предположим, у меня есть таблица заказов. Я хочу создать хранимую процедуру для этой таблицы, и есть три столбца, по которым я хочу фильтровать записи.
1- CustomerId, 2- SupplierId, 3- ProductId.
Если пользователь вводит CustomerId только в критериях поиска, запрос должен выглядеть следующим образом
SELECT * FROM Orders WHERE Orders.CustomerId = @customerId
И если пользователь указывает ProductId только в критериях поиска, запрос должен выглядеть следующим образом:
SELECT * FROM Orders WHERE Orders.ProductId = @productId
И если для пользователя заданы только все три CustomerId, ProductId и SupplierId, то все три идентификатора будут использоваться в WHERE для фильтрации.
Существует также вероятность того, что пользователь не хочет фильтровать записи, тогда запрос должен выглядеть следующим образом
SELCT * FROM Orders
Всякий раз, когда мне нужно создать такую процедуру, я помещаю все это в строку и использую условия IF, чтобы проверить, имеют ли аргументы (@customeId или @supplierId и т. Д.) Значения.
Я использую следующий метод для создания процедуры
DECLARE @query VARCHAR(MAX)
DECLARE @queryWhere VARCHAR(MAX)
SET @query = @query + 'SELECT * FROM Orders '
IF (@originationNumber IS NOT NULL)
BEGIN
BEGIN
SET @queryWhere =@queryWhere + ' Orders.CustomerId = ' + CONVERT(VARCHAR(100),@customerId)
END
END
IF(@queryWhere <> '')
BEGIN
SET @query = @query+' WHERE ' + @queryWhere
END
EXEC (@query)
Спасибо.