2009-09-03 17 views
0

Ceci est le contenu de mon champ XML dans SQL:Comment interroger un champ XML dans SQL

- <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>` 

je dois l'interroger et retourner les résultats en lignes comme ceci:

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

Je n'ai pas besoin d'inclure l'espace de noms dans les résultats. Je suis nouveau à l'interrogation XML. Merci pour toute aide.

+1

Quel moteur de base de données utilisez-vous? –

+0

Et comment le fichier XML est-il stocké? Est-il à lire en tant que fichier, stocké dans une colonne de type de données XML, ou stocké en tant que text/varchar? –

+0

J'utilise SQL 2005. –

Répondre

1

Si vous utilisez SQL Server 2005 ou 2008, quelque chose comme ça devrait fonctionner pour vous ...

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) 
+0

Pas sûr à ce sujet. Actuellement, mon XML est stocké dans une table SQL. Serait-ce quelque chose de plus comme DECLARE @xml XML SET @xml = (sélectionnez ConfigField de TestingConfig) Mais, quand je fais cela, je n'obtiens aucun résultat. J'ai eu de la chance avec ça, mais ce n'est pas dans le format que je le veux - ce que vous avez montré ci-dessus ressemble plus à ça. Je ne peux pas sembler sortir les données à moins que je déclare l'espace de noms. Aucune suggestion? Merci!!!! –

+0

Déclaration qui fonctionne pour moi, mais pas dans le format dont j'ai besoin. SELECT TestingConfig.ConfigField.query ('déclarer espace x = "http://tempuri.org/TestingConfig.xsd"; (/ x: TestingConfig/x: Config/x: ConfigId)') en tant que ConfigId, TestingConfig.ConfigField.query ('declare namespace x = "http://tempuri.org/TestingConfig.xsd"; (/ x: TestingConfig/x: Config/x: Nom)') as Nom FROM TestingConfig GO –

0

Cela a fonctionné pour moi. Merci pour les réponses de tout le monde.

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

SELECT

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

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

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

CC.Config.value ('CC: Nom [1] », 'varchar (8)) [Nom] AS

DE TestingConfig

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

Questions connexes