xml - 无法让 xml 粉碎在 SQL Server 2012 中从 XML 数据类型列到表中工作
问题描述
我没有得到任何结果,所以我做错了什么?
我已经尝试过这个论坛和技术文档中给出的示例。
这是在数据类型为OrderStatusResponse_2019
的列中调用的表中Response_XML
的数据XML
。我正在尝试使用此代码获取此 xml 的结果类型。
DECLARE @Table TABLE (Response_XML XML)
INSERT INTO @Table (Response_XML)
VALUES (<orderStatusSummaryReply xmlns="http://www.airversent.com/integration" transactionId="1" timestamp="2019-01-21T21:13:19.144Z">
<result>
<resultType>success</resultType>
</result>
</orderStatusSummaryReply>)
SELECT
XC.value('(resultType)[1]', 'NVARCHAR(10)') AS [ResultType]
FROM
OrderStatusResponse_2019
CROSS APPLY
Response_XML.nodes('/orderStatusSummaryReply/result') as T2(XC)
我得到 0 行返回。为什么?
我应该回到一排成功的地方。我得到0行。
解决方案
您的 XML 有一个默认命名空间。您需要指定它,否则查询将不起作用。
-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY(1,1) PRIMARY KEY, Response_XML XML);
INSERT INTO @tbl (Response_XML)
VALUES (N'<orderStatusSummaryReply xmlns="http://www.airversent.com/integration" transactionId="1" timestamp="2019-01-21T21:13:19.144Z">
<result>
<resultType>success</resultType>
</result>
</orderStatusSummaryReply>');
-- DDL and sample data population, end
;WITH XMLNAMESPACES(DEFAULT 'http://www.airversent.com/integration')
SELECT
ID,
c.value('(resultType/text())[1]', 'VARCHAR(10)') AS [ResultType]
FROM
@tbl
CROSS APPLY
Response_XML.nodes('/orderStatusSummaryReply/result') AS t(c);
输出
+----+------------+
| ID | ResultType |
+----+------------+
| 1 | success |
+----+------------+
推荐阅读
- database - 用于内部和外部使用的 postgresql 数据库设置
- r - 使用管道和 dplyr 将项目附加到列表
- android - 请求重试最佳实践
- python - 后 Django 测试过程中的错误
- html - 将多个静态文本覆盖添加到内联 SVG
- reactjs - (react-native-tab-view) 在 TabBar 中使用 navigation.navigate?
- scalardb - 如果执行重复的 Put,ScalarDB 是否会抛出 NoMutationApplied 异常
- pandas - 不再可以用日期索引 pandas DatetimeIndex?
- makefile - 有没有办法使用标准的 linux 命令行工具将全局文件复制到具有新文件扩展名的同一目录中?
- javascript - 如何使用 useEffect 取消选中