Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como analisar um VARCHAR passado para um procedimento armazenado no SQL Server?


Se possível, não use varchar para esse tipo de coisa, use uma tabela parâmetro de valor em vez de.

Para usar um parâmetro de valor tabelado, você deve primeiro declarar um tipo de tabela definido pelo usuário:
CREATE TYPE IntList As Table
(
    IntValue int
)

Em seguida, altere seu procedimento armazenado para aceitar essa variável em vez do nvarchar:
create proc Sp_ReturnPrdoucts
    @BrandIds dbo.IntList readonly -- Note: readonly is a must!
AS
BEGIN

SELECT * 
FROM tbl_Products as p 
join tbl_Brands b on p.ProductBrandId=b.BrandId 
join @BrandIds ON(b.BrandId = IntValue)

END

O problema é que o IN() O operador espera uma lista de variáveis ​​separadas por vírgulas, enquanto você fornece uma única variável cujo valor é uma string separada por vírgulas.

Se você não pode usar um parâmetro com valor de tabela, você pode usar uma função de divisão de string em sql para converter o valor do varchar em uma tabela de ints. existem muitos divisores por aí, eu recomendaria ler este artigo antes de escolher um.