Ответ 1
Это должно сделать:
select(
SELECT col1
FROM table1
WHERE col2 = 'x'
ORDER by col3
FOR XML path('')
) as myName
Не очень, но должен дать результат, который вам нужен
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). К сожалению, я не могу использовать * для выбора значения, и из-за ограничений в существующем приложении я не могу перебирать возвращаемые столбцы,...
Есть ли способ заставить имя столбца в возвращенном наборе записей к чему-то более разумному?
Это должно сделать:
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'
Примечание. Если вы опустите "тип" после "для xml", вы получите (я думаю) строку.
хранимая процедура
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 generation - с помощью союзов вам нужно снова обернуть результаты (В качестве бонусного результата как 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