必须声明标量变量“ @Brand”

问题描述

查询sql Server中工作正常,但是当转移到Visual Studio查询生成器时,出现错误

必须声明标量变量

查询的目的是显示最初过滤到类别的产品表中的结果,然后在选择大小,颜色和品牌时将结果过滤掉。

功能显示了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)

为什么会出现此错误,我该如何解决

解决方法

通过查询创建存储过程,然后调用该存储过程,因此您无需声明这些变量。示例通话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