Ако е възможно, не използвайте varchar за подобни неща, използвайте таблица стойностен параметър вместо това.
За да използвате параметър на таблична стойност, първо трябва да декларирате потребителски дефиниран тип таблица:
CREATE TYPE IntList As Table
(
IntValue int
)
След това променете вашата съхранена процедура, за да приемете тази променлива вместо 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
Проблемът е, че IN()
очаква списък с променливи, разделени със запетаи, докато вие предоставяте една променлива, чиято стойност е низ, разделен със запетая.
Ако не можете да използвате параметър със стойност на таблица, можете да използвате функция за разделяне на низове в sql, за да преобразувате стойността на varchar в таблица с ints. има много сплитери, бих препоръчал да прочетете тази статия преди да изберете един.