大约有100个软件包部署到SSIS服务器。所有的包都是一样的。他们都工作了很长时间。但是,在某一天,它们都开始失败并出现相同的错误:
“ Microsoft SQL Server本机客户端11.0”结果:0x80004005 说明:“无法确定元数据,因为 陈述'SELECT TOP 1 1 [TableName] 从 ( 选择前1 1 [Ta'与语句'SELECT TOP 1不兼容 1 [TableName] FROM sys。[表] 1 = 0'。 结束错误错误:2019-11-15 12:39:20.40代码:0xC020204A
来源:说明:无法检索列 来自数据源的信息。确保目标表在 数据库可用。结束错误错误:2019-11-15 12:39:20.42
代码:0xC004706B来源:SSIS.Pipeline
说明:验证失败并返回验证 状态“ VS_ISBROKEN”。结束错误错误:2019-11-15 12:39:20.42
代码:0xC004700C来源:SSIS.Pipeline
说明:一个或多个组件验证失败。结束错误 错误:2019-11-15 12:39:20.43代码:0xC0024107源:说明:任务验证期间存在错误。 结束错误DTExec:程序包执行返回DTSER_FAILURE(1)。 开始时间:12:39:19 PM完成时间:12:39:20 PM经过时间:1.234秒。 程序包执行失败。步骤失败。
未通过验证的语句的简化版本如下:
IF
(
SELECT COUNT(*)
FROM sys.[tables]
WHERE [is_ms_shipped] = 0
AND modify_date > '10/24/2019 11:33:00 AM'
) > 0
BEGIN
SELECT TOP 1
1 [TableName]
FROM
(
SELECT TOP 1
1 [TableName]
FROM sys.[tables] AS T
WHERE T.[is_ms_shipped] = 0
AND T.modify_date > '10/24/2019 11:33:00 AM'
UNION ALL
SELECT TOP 1
1 [TableName]
FROM sys.views AS T
WHERE T.[is_ms_shipped] = 0
AND T.modify_date > '10/24/2019 11:33:00 AM'
) q
END;
ELSE
BEGIN
SELECT TOP 1
1 [TableName]
FROM sys.[tables]
WHERE 1 = 0;
END
两个选择均返回具有相同数据类型的相同列。 我知道我可以重写此语句,以便不返回任何错误。 然后,我做了几个软件包并部署了它们。
但是,问题是由于内部原因,无法轻松更换软件包。我需要弄清楚发生了什么以及为什么对于所有软件包突然出现此错误,并恢复软件包工作的条件。 在发布该问题的前一天,在运行SSIS服务器的计算机上安装了以下Windows更新:
我做了什么:
我检查了ODBC驱动程序的版本,并将它们与安装在同一环境的另一个环境中的版本对齐 程序包仍成功执行。
没有帮助。
使用了以下平台版本:
预先感谢您的任何建议。