使用表值参数从CLR存储过程中调用存储过程

时间:2012-01-05 07:11:18

标签: sql-server-2008 sqlclr clrstoredprocedure table-valued-parameters

情况:

构建数据表的一个Clr存储过程,然后它尝试使用TVP参数调用SQL存储过程。

代码:

  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计划,那么它将开始故障。 (也找不到“触发器”中的逻辑)

有什么想法? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

看起来此行有错误。

command.CommandTest = "prc_test";

将其更改为

command.CommandText = "prc_test";