0

2 つのパラメーターを渡すストアド プロシージャがあります。1 つのパラメーターはテーブル値パラメーターで、もう 1 つは nvarchar です。ストアド プロシージャは次のとおりです。

    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

コードから、DataTable を @P1 として渡し、値の文字列を @P2 として次のように渡します。"'Value1', 'Value2', 'Value3', 'Value4'"

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

このように nvarchar とともにテーブル値パラメーターを操作する方法を知っている人はいますか? これを正しくフォーマットしようとすると、単純なものが欠けていると確信しています。ありがとう、

-スコット

4

1 に答える 1

1

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

このSOの質問を参照してください。

于 2011-08-12T19:27:13.043 に答える