我有两个表,tbl_Products并且两个表tbl_Brands都连接在一起BrandId。
tbl_Products
tbl_Brands
BrandId
我有一个存储过程,该过程应该返回所有作为参数传递给它的品牌ID的产品。
我的代码如下。
create proc Sp_ReturnPrdoucts @BrandIds varchar(500) = '6,7,8' AS BEGIN SELECT * FROM tbl_Products as p JOIN tbl_Brands b ON p.ProductBrandId = b.BrandId WHERE b.BrandId IN (@BrandIds) END
但是,这是给错误的BrandId是INT和@BrandIds是VARCHAR
INT
@BrandIds
VARCHAR
当我按照以下方式进行硬编码时,它可以正常工作,并从db返回所需的数据。
create proc Sp_ReturnPrdoucts @BrandIds varchar(500) = '6,7,8' AS BEGIN SELECT * FROM tbl_Products AS p JOIN tbl_Brands b ON p.ProductBrandId = b.BrandId WHERE b.BrandId IN (6,7,8) END
任何帮助:)
另一种选择是使用“间接”(正如我一直称呼的那样)
然后,您可以做..
create proc Sp_ReturnPrdoucts @BrandIds varchar(500) = '6,7,8' AS BEGIN if (isnumeric(replace(@BrandIds,',',''))=1) begin exec('SELECT * FROM tbl_Products as p join tbl_Brands b on p.ProductBrandId=b.BrandId WHERE b.BrandId IN ('+@BrandIds+')') end END
这样,将select语句构建为字符串,然后执行。
我现在添加了验证,以确保传入的字符串是纯数字的(删除所有逗号后)