Необходимо объявить скалярную переменную «@Brand»

#sql-server #visual-studio #query-builder

#sql-server #visual-studio #конструктор запросов

Вопрос:

Запрос отлично работает на SQL Server, однако при передаче в Visual Studio Query Builder я получаю сообщение об ошибке

Необходимо объявить скалярную переменную

Целью запроса является отображение результатов из таблицы product, изначально отфильтрованных по категории, затем по мере выбора размера, цвета и бренда результаты фильтруются вниз.

Функция show принимает 4 параметра: категорию, бренд, размер и цвет

 SELECT        
    ProdName, SellingPrice, BrandID, Size, Colour
FROM
    ProductTbl
WHERE
    (Category LIKE @category) 
    AND (BrandID = CASE WHEN @Brand IS NULL THEN BrandID ELSE @Brand END) 
    AND (Size = CASE WHEN @Size IS NULL THEN Size ELSE @Size END) 
    AND (Colour = CASE WHEN @Colour IS NULL THEN Colour ELSE @Colour END)
  

Почему я получаю эту ошибку и как я могу ее исправить?

Комментарии:

1. Ошибка кажется довольно очевидной. Параметры должны быть объявлены и иметь значения.

2. В конструкторе запросов VS это не позволяет мне использовать ‘Declare’

3. В вашем сообщении отсутствует то, что вы просите. Пожалуйста, сформулируйте прямой вопрос, например: «почему я получаю эту ошибку?»

Ответ №1:

Создайте хранимую процедуру из вашего запроса и вызовите ее вместо этого, чтобы вам не нужно было объявлять эти переменные. Пример вызова sproc_get_products 'SomeBrand','SomeColour','SomeCategory','SomeSize'

Код для создания хранимой процедуры

 create proc sproc_get_prodcuts (
    @Brand nvarchar(max), 
    @Colour nvarchar(max), 
    @Category nvarchar(max), 
    @Size nvarchar(max) 
)
as
begin
SELECT        
    ProdName, SellingPrice, BrandID, Size, Colour
FROM
    ProductTbl
WHERE
    (Category LIKE @category) 
    AND (BrandID = CASE WHEN @Brand IS NULL THEN BrandID ELSE @Brand END) 
    AND (Size = CASE WHEN @Size IS NULL THEN Size ELSE @Size END) 
    AND (Colour = CASE WHEN @Colour IS NULL THEN Colour ELSE @Colour END)
end