У нас есть ежедневная работа SQL, которая запускается ранним утром. Работа выполняется по разному количеству часов каждый день. Поэтому мне нужен VBScript, который я могу запустить, чтобы проверить, запущено ли задание или нет. У меня есть SQL-запрос для этого, но всякий раз, когда я использую его в VBScript, он ничего не возвращает, но когда я использую его в SQL, он отлично работает и говорит мне, что он все еще работает. Я написал много других VBScripts с SQL-запросами, и все они отлично работали.Проверьте, выполняется ли задание SQL с VBScript
USE msdb
SELECT
job.name AS [Job Name],
activity.run_requested_date AS [Run Date And Time],
DATEDIFF(SECOND, activity.run_requested_date, GETDATE()) AS [Elapsed]
FROM sysjobs_view job WITH (NOLOCK)
LEFT JOIN sysjobactivity activity ON job.job_id = activity.job_id
LEFT JOIN syssessions sess ON sess.session_id = activity.session_id
LEFT JOIN (SELECT MAX(agent_start_date) AS max_agent_start_date FROM syssessions WITH (NOLOCK)) sess_max
ON sess.agent_start_date = sess_max.max_agent_start_date
WHERE run_requested_date IS NOT NULL AND stop_execution_date IS NULL
Я не так много знаю о SQL, но я предполагаю, что этот запрос предназначен для представления вместо таблицы. Я даже не знаю разницы между представлением и таблицей. Может ли VBScript не просматривать запросы?
Редактировать Я нашел еще один SQL запрос, который даст мне то, что я хочу, как хорошо.
SELECT sysjobs.name, sysjobactivity.run_requested_date
FROM sysjobactivity WITH (NOLOCK)
INNER JOIN sysjobs ON sysjobactivity.job_id = sysjobs.job_id
WHERE sysjobactivity.start_execution_date IS NOT NULL AND sysjobactivity.stop_execution_date IS NULL
Но теперь у меня другая ошибка, которая не имеет для меня никакого смысла. VBScript код:
strSQLQuery = ""
strSQLQuery = strSQLQuery = "SELECT sysjobs.name, sysjobactivity.run_requested_date"
strSQLQuery = strSQLQuery = " FROM sysjobactivity WITH (NOLOCK)"
strSQLQuery = strSQLQuery = " INNER JOIN sysjobs ON sysjobactivity.job_id = sysjobs.job_id"
strSQLQuery = strSQLQuery = " WHERE sysjobactivity.start_execution_date IS NOT NULL AND sysjobactivity.stop_execution_date IS NULL"
' SQL connection string
strSQLConn = "Driver={SQL Server};" & _
"Server=10.144.175.142;" & _
"Address=10.144.175.142,1433;" & _
"Database=msdb;" & _
"UID=username;" & _
"PWD=password;"
' Create database connection object
Set objConn = CreateObject("ADODB.Connection")
' Connection properties
objConn.ConnectionTimeout = 800
objConn.CommandTimeout = 800
objConn.Provider = "SQLOLEDB"
' Open Connection to Database
objConn.Open strSQLConn
' Clear variables
strSQLConn = Empty
' Run the SQL query
Set objRS = objConn.Execute(strSQLQuery)
' Clear variables
strSQLQuery = Empty
' Check if any data was returned
If Not objRS.EOF Then
MsgBox objRS.Fields("name").Value
Else
MsgBox "Not Running"
End If
Я получаю ошибку теперь неправильный синтаксис около «0» на линии 30. Линия 30 является:
Set objRS = objConn.Execute(strSQLQuery)
Так что для меня означает, что что-то не так с SQL но он отлично работает в самом SQL.
Попробуйте установить базу MSDB по умолчанию в строке подключения и запустить ваш выбор без 'ИСПОЛЬЗОВАНИЯ msdb', или использовать полностью определенные имена, такие как 'FROM msdb..sysjobs_view ...', Возможно, это не сработает, потому что, когда вы выполняете USE msdb, он завершает выполнение и не выполняет SELECT, потому что это должно выполняться отдельными партиями. – lad2025
Что происходит, когда вы пытаетесь запустить это? Кроме того, код VBScript, который вы используете для запуска SQL, также будет полезен. –
Если я запускаю первый бит SQL-кода в VBScript, он ничего не возвращает. Я использую тот же метод для запуска кода, как и в приведенном коде. – user3017424