2009-10-26 4 views
0

je besoin de quelque chose commeComment rechercher des lignes avec leur représentation XML?

select * from tb_listings for xml auto 

Mais je dois chaque ligne pour être séparés, et non un gros document XML.

J'ai essayé quelque chose comme ce qui suit:

select id, (select * from tb_listings a where a.id=id for xml auto) as xmldata from tb_listings 

sortie prévue est comme:

id   xmldata 
------------------------------------------------------------ 
1   <listing><name>ABC</name><xyz>123</xyz></listing> 

Mais il ne semble pas faire ce que je veux et il faut aussi un temps très long courir.

Toutes les idées seraient appréciées. :)

Edit: figured it out:

select id, (select top 1 * from tb_listings a where a.id=b.id for xml auto) from tb_listings b 

clôture.

+0

requêtes accélèrent souvent si vous spécifiez explicitement les colonnes que vous voulez, plutôt que d'utiliser * – dnagirl

+0

@legenden: Vous ne devriez pas voter pour fermez votre propre question dans des cas comme celui-ci. Ajoutez simplement votre solution comme une autre réponse et acceptez-la (vous devez attendre un moment avant de pouvoir accepter votre propre réponse). –

Répondre

1

essayer quelque chose comme ceci:

DECLARE @YourTable table (PK1 int, c1 int, c2 varchar(5), c3 datetime) 
INSERT INTO @YourTable VALUES (1,2,'abcde','1/1/2009') 
INSERT INTO @YourTable VALUES (100,200,'zzz','12/31/2009 23:59:59') 

--list all columns in xml format 
SELECT 
    t2.PK1 --optional, can remove this column from the result set and just get the XML 
     ,(SELECT 
       * 
       FROM @YourTable t1 
       WHERE t1.PK1= t2.PK1 
       FOR XML PATH('YourTable'), TYPE 
     ) as Row 
    FROM @YourTable t2 

SORTIE:

PK1   Row 
----------- ------------------------------------------------------------------------------------------ 
1   <YourTable><PK1>1</PK1><c1>2</c1><c2>abcde</c2><c3>2009-01-01T00:00:00</c3></YourTable> 
100   <YourTable><PK1>100</PK1><c1>200</c1><c2>zzz</c2><c3>2009-12-31T23:59:59</c3></YourTable> 

(2 row(s) affected) 
+0

même que ma propre réponse, mais acceptera pour la fermeture :) – andreialecu

Questions connexes