2011-08-12 19 views
0

私は2つのパラメータを渡しているストアドプロシージャを持っています。 1つのパラメータはテーブル値のパラメータであり、もう1つはnvarcharです。ここではストアドプロシージャです:SQLストアドプロシージャ - 内部的にパラメータを使用

ALTER PROCEDURE [dbo].[_sp_TestProc]  
    @P1 As [dbo].[FileIdTableType] Readonly, 
    @P2 As NVARCHAR (MAX) 

AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT DISTINCT [Field1], [Field2], [Field3] 
     FROM [MyTable] WHERE [Field1] IN (@P1) 
     AND [Field2] IN (@P2) 

END 

はコードから、私はその後、@ P1としての私のDataTableに渡し、それは私の問題を引き起こしているの@ P2だ

"'Value1', 'Value2', 'Value3', 'Value4'"のように見えるの@ P2などの値の文字列をしています。テーブルタイプは正常に動作します。通常、このようなパラメータをストアドプロシージャで使用する場合、内部的に文字列を作成し、パラメータに文字列をフォーマットしてから、sp_executeSqlを呼び出してクエリを実行します。ただし、これはテーブル値のパラメータを使用する場合は機能しません。

誰もがこのようにnvarcharと一緒にテーブル値のパラメータを扱う方法を知っていますか?私はこれを正しくフォーマットしようとすると何かシンプルなものが欠けていると確信しています。 おかげで、

-Scott

+0

IN句にnvarcharパラメータを使用するのは、動的SQL文を作成する場合にのみ可能です。これは一般的には良い考えではありません。文字列を分割して、一時テーブル/テーブル変数に挿入することができます。 –

答えて

1

あなたが最初の一時テーブルまたはテーブルVARに@ P2を解析する必要があります。 IN演算子は、複数の値をリストする単一の文字列で使用することはできません。

this SO questionを参照してください。

関連する問題