问题描述
该查询在sql Server中工作正常,但是当转移到Visual Studio查询生成器时,出现错误
必须声明标量变量
查询的目的是显示最初过滤到类别的产品表中的结果,然后在选择大小,颜色和品牌时将结果过滤掉。
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)
解决方法
通过查询创建存储过程,然后调用该存储过程,因此您无需声明这些变量。示例通话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