Jeśli to możliwe, nie używaj varchar do tego rodzaju rzeczy, użyj tabeli ceniony parametr zamiast tego.
Aby użyć parametru wartości w tabeli, należy najpierw zadeklarować typ tabeli zdefiniowany przez użytkownika:
CREATE TYPE IntList As Table
(
IntValue int
)
Następnie zmień procedurę składowaną, aby akceptowała tę zmienną zamiast 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
Problem polega na tym, że IN()
operator oczekuje listy zmiennych oddzielonych przecinkami, podczas gdy podajesz pojedynczą zmienną, której wartość jest ciągiem oddzielonym przecinkami.
Jeśli nie możesz użyć parametru o wartości tabeli, możesz użyć funkcji dzielenia ciągów w sql, aby przekonwertować wartość varchar na tabelę int. istnieje wiele splitterów, polecam przeczytanie ten artykuł przed wybraniem jednego.