用于逻辑读取的单元测试 Sql
Posted
技术标签:
【中文标题】用于逻辑读取的单元测试 Sql【英文标题】:Unit testing Sql for logical reads 【发布时间】:2009-12-10 14:50:54 【问题描述】:我们对数据访问层进行了单元测试。这有助于发现 sql 语法错误。 现在我们有了这些测试,我想更进一步。我想运行单元测试并自动查找具有大量逻辑读取的sql。(查找需要调整的sql)
在sql中添加“set statistics IO”并不难。我正在寻找的是一个存储过程,我将它发送到数据库,它返回一个包含有关 sql 的逻辑读取信息的字符串。我在 Sybase 工作,但如果您知道存储 proc/etc 在不同的数据库中执行此操作,那仍然会有很大帮助。
谢谢!
【问题讨论】:
【参考方案1】:这对于 TSQL 过程是不可能的,但可以通过订阅 SqlConnection 对象上的 InfoMessage
事件在 .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);
【讨论】:
以上是关于用于逻辑读取的单元测试 Sql的主要内容,如果未能解决你的问题,请参考以下文章
Android Studio 单元测试:读取数据(输入)文件