Si possible, n'utilisez pas varchar pour ce genre de choses, utilisez une table table paramètre valorisé à la place.
Pour utiliser un paramètre de valeur tabulée, vous devez d'abord déclarer un type de table défini par l'utilisateur :
CREATE TYPE IntList As Table
(
IntValue int
)
Modifiez ensuite votre procédure stockée pour accepter cette variable au lieu du 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
Le problème est que le IN()
attend une liste de variables séparées par des virgules, alors que vous fournissez une seule variable dont la valeur est une chaîne séparée par des virgules.
Si vous ne pouvez pas utiliser un paramètre de table, vous pouvez utiliser une fonction de fractionnement de chaîne dans sql pour convertir la valeur du varchar en une table d'entiers. il existe de nombreux séparateurs, je vous recommande de lire cet article avant d'en choisir un.