MS SQL有一个方便的解决方法,用于将多行的列值连接成一个值:
SELECT col1
FROM table1
WHERE col2 = 'x'
ORDER by col3
FOR XML path('')
并返回一个不错的记录集:
XML_F52E2B61-18A1-11d1-B105-00805F49916B
----------------------------------------
<col1>Foo</col1><col1>Bar</col1>
只返回记录集中的列名称相当讨厌!
列名似乎包含随机元素(或GUID),因此我不愿在我的应用程序中使用它(不同的实例或不同的服务器可能有另一个GUID)。不幸的是我无法使用*来选择值,并且由于现有应用程序中的限制,我无法迭代返回的列,或者...
有没有办法强制返回记录集中的列名更合理?
答案 0 :(得分:70)
应该这样做:
select(
SELECT col1
FROM table1
WHERE col2 = 'x'
ORDER by col3
FOR XML path('')
) as myName
不漂亮,但应该给出你需要的结果
答案 1 :(得分:12)
试试这个......
select
(
select '@greeting' = 'hello', '@where' = 'there', '@who' = 'world'
for xml path ('salutation'), type
) as 'MyName'
注意:如果省略“for xml”之后的“type”,你会得到(我认为)一个字符串。
答案 2 :(得分:2)
存储过程
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
答案 3 :(得分:1)
DECLARE @XmlData XML;
SET @XmlData =(SELECT * FROM [dbo].[Users] ORDER by UserName FOR XML path(''))
SELECT @XmlData AS Result
答案 4 :(得分:0)
对于EXPLICIT xml生成 - 使用联合,您需要再次包装结果 (作为XML的奖励结果):
SELECT
CAST(
(
SELECT
*
FROM (
SELECT
1 AS Tag
,NULL AS Parent
...
UNION ALL
SELECT ...
FOR XML EXPLICIT
)
) as XML) as [MyName]
答案 5 :(得分:0)
DECLARE @XmlData XML;
SET @XmlData = (
SELECT *
FROM [dbo].[TABLE1]
FOR XML PATH('ChildNodeDetailsResponse')
,ROOT('ParentNode')
)
SELECT @XmlData AS Result