如何查询SQL中的XML字段

时间:2009-09-03 21:04:59

标签: sql-server xml

这是我在SQL中的XML字段的内容:

- <TestingConfig xmlns="http://tempuri.org/TestingConfig.xsd">
 `- <Config>`
      `<ConfigId>75</ConfigId>` 
      `<PlaceId>2</PlaceId>` 
      `<Identifier>05</Identifier>` 
      `<Name>TEST1</Name>` 
      `</Config>`
  `- <Config>`
      `<ConfigId>76</ConfigId>` 
      `<PlaceId>2</PlaceId>` 
      `<Identifier>06</Identifier>` 
      `<Name>TEST2</Name>` 
      `</Config>`
 `</TestingConfig>`

我需要查询它并将结果返回到以下行:

    Config ID       PlaceID        Identifier        Name
    75              2              05                TEST1
    76              2              06                TEST2

我需要它不在结果中包含命名空间。我是XML查询的新手。谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

如果你使用的是SQL Server 2005或2008,那么这样的东西对你有用......

DECLARE @xml XML

SELECT @xml = '<TestingConfig>
 <Config>
      <ConfigId>75</ConfigId>
      <PlaceId>2</PlaceId>
      <Identifier>05</Identifier>
      <Name>TEST1</Name>
      </Config>
  <Config>
      <ConfigId>76</ConfigId>
      <PlaceId>2</PlaceId>
      <Identifier>06</Identifier>
      <Name>TEST2</Name>
      </Config>
 </TestingConfig>'

 SELECT node.ref.value( 'ConfigId[1]', 'int' ) AS [ConfigId],
        node.ref.value( 'PlaceId[1]', 'int' ) AS [PlaceId],
        node.ref.value( 'Identifier[1]', 'varchar(32)' ) AS [Ident],
        node.ref.value( 'Name[1]', 'varchar(32)' ) AS [Name]
        FROM @xml.nodes( '/TestingConfig/Config' ) AS node(ref)

答案 1 :(得分:0)

这对我有用。感谢大家的回复。

WITH XMLNAMESPACES('http://tempuri.org/TestingConfig.xsd'AS CC)

选择

CC.Config.value('CC:ConfigId [1]','int')AS [ConfigId],

CC.Config.value('CC:PlaceId [1]','int')AS [PlaceId],

CC.Config.value('CC:Identifier [1]','char(2)')AS [Identifier],

CC.Config.value('CC:Name [1]','varchar(8)')AS [名称]

FROM TestingConfig

CROSS APPLY TestingConfig.ConfigField.nodes('// CC:Config')AS CC(配置)