1

我们对数据访问层进行了单元测试。这有助于发现 sql 语法错误。
现在我们有了这些测试,我想更进一步。我想运行单元测试并自动查找具有大量逻辑读取的sql。(查找需要调整的sql)

在 sql 中添加“set statistics IO”并不难。我正在寻找的是一个存储过程,我将它发送到 db 并返回一个包含有关 sql 的逻辑读取信息的字符串。我在 Sybase 工作,但如果您知道存储的 proc/etc 在不同的数据库中执行此操作,那仍然会有很大的帮助。

谢谢!

4

1 回答 1

1

这对于 TSQL 过程是不可能的,但可以通过订阅InfoMessageSqlConnection 对象上的事件在 .net 中捕获输出。

  ...
  using (var connection = new SqlConnection("connectionstring")
  using (var command = new SqlCommand("SET STATISTICS IO ON"))
  {
      connection.Open();
      connection.InfoMessage += OnInfoMessage;

      using (var reader = command.ExecuteReader())
      {
          ....
      }
  }
  ...

  private static void OnInfoMessage(object sender, SqlInfoMessageEventArgs args)
  {
      foreach (SqlError err in args.Errors)
      {
           Console.WriteLine(err.Message);
      }
  }
于 2011-03-11T11:04:18.147 回答