我有一个 SQL 代理作业,从上午 9 点到下午 6 点每 15 分钟运行一次。
DECLARE @db_name varchar(100)
DECLARE c_db_names CURSOR FOR
SELECT name
FROM sys.databases
WHERE name NOT IN
('VARIOUS DATABASES HERE')
TRUNCATE TABLE DBDATA.dbo.DATA
OPEN c_db_names
FETCH c_db_names INTO @db_name
WHILE @@Fetch_Status = 0
BEGIN
EXEC('
INSERT INTO DBDATA.dbo.DATA
SELECT
''' + @db_name + '''
,COUNT(*)
,MIN(datereq)
FROM ' + @db_name + '.dbo.TABLE
' + 'where lqdone = 0')
FETCH c_db_names INTO @db_name
END
CLOSE c_db_names
DEALLOCATE c_db_names
如果有任何结果,我会通过电子邮件将它们发送给自己。由于某种未知的原因,在过去的两三周里,我无法在早上 9 点 15 分之前运行该查询,当时 SQL 代理开始工作并根据主题显示错误消息而失败。每次下一次尝试都很好,如果我尝试手动运行它只会在上午 9:15 或更早时失败。真的很困惑,不确定这里发生了什么。
datereq 字段是 datetime,db_name 是 nchar。它在它检查的第 11 个数据库上失败,但我检查了该表,它与其他表完全相同。
有任何想法吗?:)