可能であれば、この種のことには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の値をintのテーブルに変換できます。スプリッターはたくさんあります。