无法初始化 sqlcmd 库,错误号为 -2147467259 - XML 列

问题描述

我一直收到这个错误

无法初始化 sqlcmd 库,错误号为 -2147467259

当我尝试执行以下 sql 代码时。这是一个正常的查询,而不是通过 sql Server 代理。

declare @sql varchar(8000)
set @sql = 'select a.b.value(''(../../@ID)'',''varchar(100)'') as [System-ID]
            from [DB].[Schema].[Configuration] R
            outer apply R.[Configuration].nodes(''root/System/Role/Authorization'') as a(b) 
            where R.[Report ID] = ''IT.00004'''

print @sql

exec msdb.dbo.sp_send_dbmail
    @profile_name = 'servername',@recipients = 'info@company.com',@subject = 'Test B',@query = @sql

但是,当我按照以下方式修改查询时,一切正常。

declare @sql varchar(8000)
set @sql = 'select *
            from [DB].[Schema].[Configuration] R
            where R.[Report ID] = ''IT.00004'''

print @sql

exec msdb.dbo.sp_send_dbmail
    @profile_name = 'servername',@query = @sql

所以问题一定出在语句的这一部分(我在表“Configuration”中引用了一个名为“Configuration”的 XML 列 -> 列名和表名相同) :

outer apply R.[Configuration].nodes('root/System/Role/Authorization') as a(b)

当我在 msdb.dbo.sp_send_dbmail 语法之外运行这两个查询时,它们都运行得很好。

有人知道这是怎么回事吗?我怀疑这是否与权限有关,因为导致问题的部分是使用不会导致任何问题的同一个表。

解决方法

为了解决这个问题,我必须在查询中添加以下内容:

set @SQL = 'SET QUOTED_IDENTIFIER ON '
set @SQL = @SQL + char(13)
set @SQL = @SQL + 'select a.b.value(''(../../@ID)'',''varchar(100)'') as [System-ID]
            from [DB].[Schema].[Configuration] R
            outer apply R.[Configuration].nodes(''root/System/Role/Authorization'') as a(b) 
            where R.[Report ID] = ''IT.00004'''

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...