SQL Server批处理问题与错误处理

时间:2009-09-07 11:32:56

标签: sql-server tsql error-handling batch-file

我对SQL Server中的SQL批处理有疑问。

假设我使用以下代码执行SqlCommand:

 private void Example(SqlConnection connection, SqlTransaction transaction)
  {
    using (SqlCommand cmd = new SqlCommand("select * from T1; EXECUTE('update T2 set 1=2')", connection, transaction))
    {
      SqlDataReader reader = cmd.ExecuteReader();
      ..
      ..
    }
  }

现在,由于批处理中的第一个语句成功,我得到NO EXCEPTION和RESULT事件,尽管EXECUTE(''') - 语句显然是错误的。

如果我反转语句,我会得到一个异常,因为在第一个错误之前没有生成结果集。

现在,假设我想在两种情况下检测错误,如何在不生成“冗余”代码的情况下执行此操作,如下所示:

 private void Example(SqlConnection connection, SqlTransaction transaction)
  {
    using (SqlCommand cmd = new SqlCommand("select INTO #T1 from T1; EXECUTE('update T2 set 1=2'); select * from #T1", connection, transaction))
    {
      SqlDataReader reader = cmd.ExecuteReader();
      ..
      ..
    }
  }

没有这个问题看似奇怪但仍然......我想知道答案,请不要问为什么:)

1 个答案:

答案 0 :(得分:1)

你需要读取SqlDataReader,直到它不再返回结果(Read()循环然后是NextResult()并重复)。例外情况是TDS流进一步下降,而SqlClient尚未解析它。