Verwenden Sie nach Möglichkeit nicht varchar für solche Dinge, sondern eine Tabelle Wertparameter stattdessen.
Um einen Tabellenwertparameter zu verwenden, sollten Sie zuerst einen benutzerdefinierten Tabellentyp deklarieren:
CREATE TYPE IntList As Table
(
IntValue int
)
Ändern Sie dann Ihre gespeicherte Prozedur so, dass sie diese Variable anstelle von nvarchar akzeptiert:
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
Das Problem ist, dass IN()
Der Operator erwartet eine Liste von Variablen, die durch Kommas getrennt sind, während Sie eine einzelne Variable angeben, deren Wert eine durch Kommas getrennte Zeichenfolge ist.
Wenn Sie keinen Tabellenwertparameter verwenden können, können Sie eine Zeichenfolgenaufteilungsfunktion in SQL verwenden, um den Wert des Varchar in eine Tabelle mit Ganzzahlen zu konvertieren. Es gibt viele Splitter, ich würde empfehlen, diesen Artikel bevor Sie einen auswählen.