从 SQL Server 2019

问题描述

为了在 VBA 应用程序中监视 sql Server 作业,我使用 ADO 从 msdb 数据库运行 sp_get_composite_job_info 存储过程。一旦我在 ADODB.Recordset 中得到结果,我就会检查 current_execution_step 字段。多年来,这在 sql Server 2012 中一直运行良好。

我们刚刚迁移到 sql Server 2019,现在仍然适用于 sql Server 2012 的相同代码为 current_execution_step 字段返回一个不可读的值。

我得到一堆矩形和正方形,而不是“4(步骤名称)”。

如果我在 SSMS 中对 sp_get_composite_job_info 运行相同的调用,我可以在两台服务器上读取 current_execution_step 字段。只有当我尝试在 VBA/ADO 中读取该字段时,它才是胡言乱语。

更糟糕的是,我可以很好地读取同一个记录集中的其他字段。只有这一字段(恰好是我需要阅读的唯一字段)不可读。

我在 VBA 中使用的驱动程序是 ODBC Driver 17 for sql Server。但同样,我对两台服务器使用相同的驱动程序,只有 2019 年有这个问题。

这可能是什么原因造成的?

解决方法

sp_get_composite_job_info 的 SQL Server 2012 版本(@RBarryYoung 提到的未记录)返回 current_execution_step 作为 nvarchar(128),而 SQL Server 2019 返回 nvarchar(MAX)

ADO 不知道 SQL Server 2000 之后引入的 SQL Server 数据类型。尝试安装最新的 MSOLEDBSQL OLE DB 驱动程序(ADO 本身就是 OLE DB)并在连接字符串中指定 DataTypeCompatibility=80。>

,

幸运的是,答案就像回到 OLE 并将提供程序切换到 SQLNCLI11 而不是 SQLOLEDB 一样简单。由于 SQLNCLI11 无所不在,我不必寻找所有可能使用这些应用程序的机器并在其上安装 MSOLEDBSQL。