SQL Server 2019 在 VBA/ADO 中返回了不可读的值

Unreadable value returned in VBA/ADO from SQL Server 2019

为了在 VBA 应用程序中监控 SQL 服务器作业,我使用 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 中使用的驱动程序是 SQL 服务器的 ODBC 驱动程序 17。但是同样,我为两个服务器使用相同的驱动程序,并且只有 2019 有这个问题。

可能是什么原因造成的?

sp_get_composite_job_info 的 SQL Server 2012 版本(@RBarryYoung 提到的未记录) returns current_execution_step 作为 nvarchar(128) 而 SQL 服务器2019 returns nvarchar(MAX).

ADO 无法识别在 SQL Server 2000 之后引入的 SQL 服务器数据类型。请尝试在连接字符串中安装最新的 MSOLEDBSQL OLE DB driver (ADO is natively OLE DB) and specifying the DataTypeCompatibility=80

幸运的是,答案很简单,只需返回 OLE 并将 Provider 切换为 SQLNCLI11 而不是 SQLOLEDB。由于 SQLNCLI11 无处不在,我不必搜索所有可能使用这些应用程序的机器并在其上安装 MSOLEDBSQL。