我在SQL Server表(SQL Server 2012)中有一个XML列,其中包含以下数据:
<history>
<status updatedAt="2013-09-01" />
<status updatedAt="2013-08-12" />
<status updatedAt="2013-05-10" />
<status updatedAt="2013-04-01" />
</history>
问题是,当我用XQuery表达式查询它时,例如:
SELECT Statuses = StatusHistory.query('/history/status[@updatedAt >= @sql:variable("@start") and @updatedAt <= @sql:variable("@end")]')
返回以下结果:
<status updatedAt="2013-08-12" />
<status updatedAt="2013-05-10" />
这是无效的xml(包含多个根元素)。
有没有办法将query()
方法的结果包装在一个根中,或者保留原始的xml结构?
答案 0 :(得分:1)
这不是单个XML结果,而是一系列XML片段,每个XML片段都是格式良好的XML(从技术上讲,它没有任何模式就无法生效,发布的输入也是格式良好,无效)。
XQuery允许构建新结果:
SELECT Statuses = StatusHistory.query('
<history>
{
/history/status
[
@updatedAt >= @sql:variable("@start") and
@updatedAt <= @sql:variable("@end" )
]
}
</history>
')
作为替代方案,您可以创建XML片段的副本并删除不想要的所有节点,但我认为此解决方案更直接。