如何在SELECT FOR XML查询中select返回的列名?

MS SQL有一个方便的解决方法,用于将来自多行的列值连接成一个值:

SELECT col1 FROM table1 WHERE col2 = 'x' ORDER by col3 FOR XML path('') 

并返回一个不错的logging集:

 XML_F52E2B61-18A1-11d1-B105-00805F49916B ---------------------------------------- <col1>Foo</col1><col1>Bar</col1> 

只有返回的logging集中的列名是相当讨厌的!

列名似乎包括随机元素(或GUID),因此我不愿意在我的应用程序中使用它(不同的实例或不同的服务器可能有另一个GUID)。 不幸的是,我不能使用*来select值,由于现有的应用程序的限制,我不能遍历返回的列,要么…

有没有办法强制返回的logging集中的列名更明智一些?

应该这样做:

 select( SELECT col1 FROM table1 WHERE col2 = 'x' ORDER by col3 FOR XML path('') ) as myName 

不漂亮,但应该给你需要的结果

尝试这个…

 select ( select '@greeting' = 'hello', '@where' = 'there', '@who' = 'world' for xml path ('salutation'), type ) as 'MyName' 

注意:如果你在“for xml”之后省略“type”,你会得到(我认为)一个string。

存储过程

 declare @requestResultXML xml set @requestResultXML = ( SELECT 'NPOIT-1.0' AS '@Interface', ( select 'Query' as '@Type', 'GetBill' as '@Query', 'True' as '@CompressResult' FOR XML PATH('Head'), TYPE ), ( select @pin as '@PIN', @period as '@Period', @number as '@Number', @barcode as '@Barcode' FOR XML PATH('QueryParams'), TYPE ) as Data FOR XML PATH('DataExchangeModule') ) select @requestResultXML as GetBillRequest 

对于EXPLICIT XML生成 – 与工会,你需要再次包装结果(作为奖金结果作为XML):

 SELECT CAST( ( SELECT * FROM ( SELECT 1 AS Tag ,NULL AS Parent ... UNION ALL SELECT ... FOR XML EXPLICIT ) ) as XML) as [MyName] 
 DECLARE @XmlData XML; SET @XmlData = ( SELECT * FROM [dbo].[TABLE1] FOR XML PATH('ChildNodeDetailsResponse') ,ROOT('ParentNode') ) SELECT @XmlData AS Result 
 DECLARE @XmlData XML; SET @XmlData =(SELECT * FROM [dbo].[Users] ORDER by UserName FOR XML path('')) SELECT @XmlData AS Result