状況に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計画を削除すると障害が発生します。 (その "トリガ"のロジックも見つかりません)
どのような考えですか? ありがとうございます。
に変更し、それを私たちにSPのコードを表示するにも –
あなたは私たちに、テーブル型の定義を表示することができますか? –
これは、DataTable、tvp_testを2 ints nullableでレプリケートします。create type dbo.tvp_test as table(field1 int null、field2 int null) –