Usar SSIS para extraer una representación XML de los datos de la tabla en un archivo

Estoy tratando de usar SSIS para extraer la representación XML de un conjunto de resultados de consulta en un archivo de texto. Actualmente, mi consulta está extrayendo con éxito la salida XML exacta que necesito cuando la ejecuto en SSMS. Probé todos los trucos que pude encontrar para usar este conjunto de resultados en un paquete SSIS para crear un archivo.

El uso de un flujo de datos para portar una fuente OLE a un archivo plano no funciona porque la salida de una consulta XML se trata como TEXTO y SSIS no puede enviar TEXTO, NTEXT o IMAGEN a un destino de archivo.

Luego intenté Ejecutar Tarea SQL para completar una variable de usuario y luego usar una Tarea de secuencia de comandos (escrita en C #) para escribir el contenido de esta variable de usuario en una salida de archivo, pero la variable de usuario siempre está vacía. No lo sé, pero sospecho que esto se debe, nuevamente, a que el XML se trata como TEXTO o IMAGEN y la variable de usuario no maneja esto.

La consulta tiene este formato: SELECT * FROM dataTable WHERE dataTable.FIELD = 'Value' FOR XML AUTO, ROOT ('RootVal')

El conjunto de datos resultante es XML bien formado, pero no puedo averiguar cómo obtenerlo del conjunto de resultados al archivo.

Es una tarea relativamente fácil para mí escribir una aplicación de consola para hacer esto en C # 4.0, pero las restricciones me requieren que al menos demuestre que NO PUEDE hacerse con SSIS antes de escribir la aplicación de consola y un programador.

preguntado el 01 de febrero de 12 a las 22:02

¿Sería frustrante por completo el objetivo del ejercicio hacerlo todo en una tarea de guión? Si se puede hacer en una aplicación de consola, se puede hacer en una tarea de script ... -

2 Respuestas

Lamento estropearlo, pero hay una opción SSIS para ti: Exportar transformación de columna.

Definí una consulta OLE DB con

SELECT
    *
FROM
(
    SELECT * FROM dbo.spt_values FOR XML AUTO, ROOT('RootVal')
) D (xml_node)
CROSS APPLY
(
    SELECT 'C:\ssisdata\so_xmlExtract.xml'
) F (fileName)

Esto da como resultado 1 fila y 2 columnas en el flujo de datos. Luego adjunté la Transformación de columna de exportación y la conecté con xml_node as Extraer columna y fileName como el Columna de ruta de archivo

A continuación, se muestran resultados en su mayoría truncados

<RootVal>
    <dbo.spt_values name="rpc" number="1" type="A  " status="0"/>
    <dbo.spt_values name="dist" number="8" type="A  " status="0"/>
    <dbo.spt_values name="deferred" number="8192" type="V  " low="0" high="1" status="0"/>
</RootVal>

Una respuesta más detallada, con imágenes, está disponible en esta sección de preguntas y respuestas. Exportar columna Varbinary (max) con ssis

contestado el 23 de mayo de 17 a las 14:05

Funciona de maravilla. Probablemente la solución más poco intuitiva de la historia, pero me alegra que alguien supiera cómo hacer esto. - urbadave

La pregunta y esta respuesta se refieren a cómo exportar datos XML a un archivo plano. No se fije en la consulta proporcionada y en cómo podría reescribirse. Existe simplemente para dar a los futuros lectores un punto de referencia reproducible. El OP no proporcionó una consulta, por lo que esta existe como sustituto. - billinkc

La respuesta de BillInKC es la mejor que he visto, pero SQL se puede simplificar (no es necesario realizar una aplicación cruzada):

SELECT X.*, 'output.xml' AS filename
FROM (SELECT * FROM #t FOR XML PATH('item'), ROOT('itemList')) AS X (xml_node)

Producirá la misma estructura:

xml_node                                           filename
-------------------------------------------------- ----------
<itemList><item><num>1000</num></item></itemlist>  output.xml

(1 row(s) affected)

Respondido 03 Oct 13, 00:10

¿El votante descontento intentó la consulta sin éxito? ¿Cuál fue el problema? - ajeh

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.