Ситуация:
Одна хранимая процедура Clr, которая создает таблицу данных и затем пытается вызвать хранимую процедуру SQL с параметром TVP.
Код:
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 (где x - случайный) он выдаст мне y (где y - случайный) «произошла серьезная ошибка» без других подробностей, и после этого цикл начнется снова.Из того, что я вижу, проблема на стороне CLR SP, поскольку, когда ошибки начинают возникать, SQL SP может быть изменен и неисправен, поскольку ошибка остается той же.Возможно, нет никакой любви между CLR SP и TVP, но я не нашел никакой ссылки на это.
В качестве примечания: если он работает, он может работать долго, но если я удалю план SP, он начнет работать неправильно.(не могу найти логику и в этом «триггере»)
Есть мысли?Заранее спасибо.