【发布时间】:2020-07-15 16:59:19
【问题描述】:
我指的是这个:How to query values from xml nodes? 并试图找到搜索节点值(如果存在)的最佳和快速方法,但不知何故,它看起来比我最初想的更完整。
数据库表中有大约 10K 条记录。其中一列将 XML 存储在表中,列值与此类似(还有很多其他节点):
<GrobReportXmlFileXmlFile>
<GrobReport>
<ReportHeader>
<OrganizationReportReferenceIdentifier>Hello</OrganizationReportReferenceIdentifier>
<OrganizationNumber>Hi</OrganizationNumber>
</ReportHeader>
</GrobReport>
<GrobReport>
<ReportHeader>
<OrganizationReportReferenceIdentifier>Find</OrganizationReportReferenceIdentifier>
<OrganizationNumber>Me</OrganizationNumber>
</ReportHeader>
</GrobReport>
我试过的脚本是:
select columnname.value('(GrobReportXmlFileXmlFile/GrobReport/ReportHeader/OrganizationReportReferenceIdentifier/)[Hello]',nvarchar(max)) from Table
注意:我的列名是:
列名(nvarchar(max),null)
但是,它的显示错误,nvarchar 无法被内置函数识别。
我已经像这样更改了我的查询:
select T.[columnname].value('(GrobReportXmlFileXmlFile/GrobReport/ReportHeader/OrganizationReportReferenceIdentifier/)[Hello]','nvarchar(max)') from Table as T
但是,在这种情况下,我收到以下错误:
不能在 nvarchar(max) 上调用方法
任何想法,如果 .value 需要被其他函数替换,因为它的类型是 nvarchar(max)?我可以尝试“价值”功能的替代品吗?
我想查找任何列/节点中是否存在任何特定值(比如说“Hello”)?如果存在,那么它应该返回我搜索值所在的记录数(行数)在场吗?
谢谢
【问题讨论】:
-
“nvarchar(max)”应该是什么?什么是“最大值”?看起来语法不正确
-
对不起,我没听懂你的问题。列数据类型是这样定义的。数据库是 Azure SQL DB,我正在使用 SSMS 2019 编写/执行查询。
-
nvarchar(MAX) 是否应该用单引号括起来:'nvarchar(max)'?
-
对不起,我的错。是的,我改变了这一点。但是,现在我收到一个新错误:找不到列“columnname”或用户定义的函数或聚合“columnname.value”,或者名称不明确。
-
columnname 应该是表上物理列的名称:select [name_of_col_here].value
标签: xml tsql azure-sql-database xquery