2

状況にCLRストアドプロシージャ内からストアドプロシージャを呼び出します。は、テーブル値パラメーター

コード:

public class tvp_test : System.Data.DataTable 
    { 
    public tvp_test() 
    { 
     this.Column.Add("field1",typeof(System.Int32)); 
     this.Column.Add("field2",typeof(System.Int32)); 
    } 
    } 

............................................................. 

    { 
    var tvp = new tvp_test(); 

............................................................. 

    using(SqlConnection con = new SqlConnection("context connection=true")) 
    { 
     con.Open(); 
     var command = con.CreateCommand(); 

     command.CommandType = CommandType.StoredProcedure; 
     command.CommandTest = "prc_test"; 
     command.Parameters.Add("@a",System.Data.SqlDbType.Structured); 
     command.Parameters["@a"].Value = tvp; 
     command.ExecuteNonQuery(); 

     con.Close(); 
    } 
    } 

.................................... ..................................

create procedure prc_test 
    @a tvp_test readonly 
begin 
    insert into #tmp (field1,field2) /* #tmp is created before the call of the CLR SP */ 
    select field1,field2 from @a 
end 

問題:

行動不安定です。 (xはランダムですが)yの後に(yがランダムです) "重大エラーが発生しました"というメッセージが表示され、その後はサイクルが再開されます。私が見るところでは、エラーが発生し始めたときと同じようにCLR SP側に問題があり、エラーが同じであればSQL SPを変更してエラーになる可能性があります。 CLR SPとTVPの間には愛はないかもしれませんが、私はそれについて言及していませんでした。

副作用として、動作すると長時間働くことがありますが、SP計画を削除すると障害が発生します。 (その "トリガ"のロジックも見つかりません)

どのような考えですか? ありがとうございます。

+1

に変更し、それを私たちにSPのコードを表示するにも –

+0

あなたは私たちに、テーブル型の定義を表示することができますか? –

+0

これは、DataTable、tvp_testを2 ints nullableでレプリケートします。create type dbo.tvp_test as table(field1 int null、field2 int null) –

答えて

0

この行のように表示されるのはエラーです。

command.CommandTest = "prc_test"; 

command.CommandText = "prc_test"; 
+0

これは当てはまりますが、動作はそれに接続されているとは思われません。 'SqlCommand'に' CommandTest'プロパティがないので、プログラムはまったくコンパイルされません。 – jAC

関連する問題