#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