Om möjligt, använd inte varchar för den här typen av saker, använd en tabell värderad parameter istället.
För att använda en tabellvärdesparameter bör du först deklarera en användardefinierad tabelltyp:
CREATE TYPE IntList As Table
(
IntValue int
)
Ändra sedan din lagrade procedur för att acceptera denna variabel istället för 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
Problemet är att IN()
operatorn förväntar sig en lista med variabler separerade med kommatecken, medan du tillhandahåller en enskild variabel att dess värde är en kommaseparerad sträng.
Om du inte kan använda en tabellvärderad parameter kan du använda en strängdelningsfunktion i sql för att konvertera värdet på varchar till en tabell med ints. det finns många splitters där ute, jag skulle rekommendera att läsa denna artikel innan du väljer en.