如何为SQL Server表中的所有行返回XML列中特定属性的值?

时间:2012-01-16 21:29:26

标签: sql xpath xquery

所以我花了一整天时间寻找使用xpath / xquery作为SQL Server查询的一部分来从XML数据列返回值无效的好例子。

这就是我想要做的。我在表中的XML数据列中有以下XML:

<Document ID="156">
  <Version>1.0</Version>
  <LastModifiedInVersion>1.0</LastModifiedInVersion>
  <Signatures />
  <Controls>
    <Control ID="TB1">
      <Value>Hello world!</Value>
    </Control>
  </Controls>
  <AutoKeys />
</Document>

我正在尝试编写一个SQL Server查询,该查询将返回ID节点的Document属性的值。我想对表中的所有行执行此操作,并且所有XML数据都以完全相同的格式启动。

任何帮助将不胜感激!我真的需要一个干净的例子,我可以从那里拿走它!

3 个答案:

答案 0 :(得分:8)

这就是表格的XML列中的整个XML?

在这种情况下,请使用以下内容:

SELECT
   (list of other columns),
   XmlColumn.value('(/Document/@ID)[1]', 'int') AS 'DocumentID'
FROM
   dbo.YourTable

.value()调用基本上将XPath作为其第一个参数,并将T-SQL类型作为其第二个参数,并将该XML值作为给定的T-SQL数据类型返回给查询。

答案 1 :(得分:1)

如果您的xml作为普通字符串保存在数据库中,请立即转换并查询

SELECT CONVERT(XML, [XMLStringColumn]).value('(/Document/@ID)[1]', 'int') 
FROM yourTable

答案 2 :(得分:0)

SELECT xmlcol.value('(//Document/@ID)[1]','int') AS DocID  FROM xmltable