一尘不染

如何解析传递给SQL Server中存储过程的VARCHAR?

sql

我有两个表,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

但是,这是给错误的BrandIdINT@BrandIdsVARCHAR

当我按照以下方式进行硬编码时,它可以正常工作,并从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

任何帮助:)


阅读 117

收藏
2021-05-05

共1个答案

一尘不染

另一种选择是使用“间接”(正如我一直称呼的那样)

然后,您可以做..

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语句构建为字符串,然后执行。

我现在添加了验证,以确保传入的字符串是纯数字的(删除所有逗号后)

2021-05-05