una transact stuff partir leer for extraer ejemplos datos crear consulta campo sql sql-server xml sql-server-2005

transact - stuff sql server for xml path



¿Cómo elegir el nombre de columna devuelto en una consulta SELECT FOR XML? (6)

Eso debería hacer:

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

No es bonito, pero debe dar el resultado que necesita

MS SQL tiene una solución conveniente para concatenar un valor de columna de varias filas en un valor:

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

y eso devuelve un buen conjunto de registros:

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

¡solo el nombre de la columna en el conjunto de registros devuelto es bastante desagradable!

El nombre de la columna parece incluir elementos aleatorios (o un GUID) y, por lo tanto, soy reacio a usarlo en mi aplicación (diferentes instancias o diferentes servidores pueden tener otro GUID). Desafortunadamente no puedo usar * para seleccionar el valor, y debido a las restricciones en la aplicación existente no puedo repetir las columnas devueltas, ya sea ...

¿Hay alguna manera de forzar el nombre de la columna en el conjunto de registros devuelto a algo más sensato?


procedimiento almacenado

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


Prueba esto...

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

Nota: Si omite el "tipo" después de "para xml", obtiene (creo) una cadena.


Para la generación EXPLICIT xml: con las uniones, debe ajustar los resultados una vez más (como resultado adicional como 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