检查SQL作业是否与VBScript一起运行

时间:2015-08-31 10:15:46

标签: sql-server vbscript

我们每天都有凌晨的SQL工作。这项工作每天运行不同的小时数。所以我需要一个可以运行的VBScript来检查作业当前是否正在运行。我有一个SQL查询来做它但是每当我在VBScript中使用它时它什么都不返回,但是当我在SQL中使用它时它完美地运行并告诉我它仍在运行。我已经用SQL查询编写了许多其他的VBScripts,它们都运行得很好。

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

我现在得到的错误是第30行“0”附近的语法不正确。第30行是:

Set objRS = objConn.Execute( strSQLQuery )

所以,对我来说这意味着SQL查询有问题但它在SQL本身运行得非常好。

2 个答案:

答案 0 :(得分:1)

当您在VB中执行时,不应在查询中使用USE msdb

1)在连接字符串中将msdb设置为默认数据库

2)在您选择的使用全名如:     msdb..sysjobs_view代替sysjobs_view

编辑:

连接字符串时也会出错:

strSQLQuery = strSQLQuery = "SELECT sysjobs.name, sysjobactivity.run_requested_date"

应该

strSQLQuery = strSQLQuery & "SELECT sysjobs.name, sysjobactivity.run_requested_date"

否则,您将只获得查询的最后一部分并在执行期间获得语法错误。

答案 1 :(得分:0)

感谢用户lad2025,我发现了问题。我的第二个代码/ SQL查询可以解决问题。我只是语法错误。

另外,从VBScript读取视图时似乎存在问题。

无论如何,解决方案是我使用以下内容:

 strSQLQuery = strSQLQuery = "..."

应该是:

strSQLQuery = strSQLQuery & "..."