Gebruik indien mogelijk varchar niet voor dit soort dingen, gebruik een tabel gewaardeerde parameter in plaats daarvan.
Om een tabelwaardeparameter te gebruiken, moet u eerst een door de gebruiker gedefinieerd tabeltype declareren:
CREATE TYPE IntList As Table
(
IntValue int
)
Wijzig vervolgens uw opgeslagen procedure om deze variabele te accepteren in plaats van de 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
Het probleem is dat de IN()
operator verwacht een lijst met variabelen gescheiden door komma's, terwijl u een enkele variabele opgeeft waarvan de waarde een door komma's gescheiden tekenreeks is.
Als u geen parameter met tabelwaarde kunt gebruiken, kunt u een tekenreekssplitsingsfunctie in sql gebruiken om de waarde van de varchar om te zetten in een tabel met ints. er zijn veel splitters, ik zou aanraden om dit artikel te lezen voordat je er een kiest.