Я делаю некоторые отчеты о заданиях SQL Server, используя объекты управления SQL Server (SMO).
Это тестовое задание:
![enter image description here](https://i.stack.imgur.com/zTAvV.png)
Это код:
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Smo.Agent;
...
var server = new Server("TestServer");
var agent = server.JobServer;
var job = agent.Jobs["TestJob Long"];
var jhf = new JobHistoryFilter();
var tbl = job.EnumHistory(jhf);
foreach (DataRow row in tbl.Rows.Cast<DataRow>())
{
Console.WriteLine("StepId: {0} | Date: {1} | Duration: {2} | Status:{3}", row["StepId"], row["RunDate"], row["RunDuration"], (JobOutcome)row["RunStatus"]);
}
Это вывод:
StepId: 0 | Date: 27-01-2011 16:23:14 | Duration: 146 | Status:Succeeded
StepId: 3 | Date: 27-01-2011 16:24:23 | Duration: 37 | Status:Succeeded
StepId: 2 | Date: 27-01-2011 16:23:50 | Duration: 33 | Status:Succeeded
StepId: 1 | Date: 27-01-2011 16:23:14 | Duration: 36 | Status:Succeeded
Строки с stepId = 0 являются «сводкой»шаг, который содержит совокупную информацию (или, по крайней мере, я так думал), но эта информация неверна.37 + 33 + 36 - это не 146 секунд, а только 106. Это соответствует времени, отображаемому в SQL Server Management Studio ![enter image description here](https://i.stack.imgur.com/2ekoJ.png)
Это не проблема, ограниченная одним заданием, одним сервером и т. Д. - я получаюэто везде.
Я мог бы сложить шаги, чтобы получить правильное время, но я чувствую, что чего-то здесь не хватает - должно быть объяснение, так как я не думаю, что SMO просто возвращает неверную информацию.
Что мне здесь не хватает?