[Resuelto] Insertar Xml con DTD interno en SQL Server

Iniciado por K-YreX, 21 Marzo 2020, 21:03 PM

0 Miembros y 1 Visitante están viendo este tema.

K-YreX

Mi problema, como dice el asunto es el siguiente: tengo un fichero xml muy sencillo con un dtd interno y quiero pasar su contenido a una tabla de SQL Server. (Estoy utilizando SSMS 2014). Lo primero que había intentado era:
Código (sql) [Seleccionar]

DECLARE @doc xml
SELECT @doc = (cast x as xml) FROM OPENROWSET(BULK 'ruta', SINGLE_BLOB) as T(x)

Pero al intentar ejecutarlo me aparecía el siguiente error:

No se permite analizar XML con DTD de un subconjunto interno. Utilice CONVERT con la opción de estilo 2 para habilitar la compatibilidad limitada con DTD de subconjuntos internos.


Investigué un poco el uso de CONVERT y cambié la sentencia anterior por:
Código (sql) [Seleccionar]

SELECT @doc = CONVERT(xml, x, 2) FROM OPENROWSET(BULK 'ruta', SINGLE_BLOB) as T(x)

Parece que se ejecuta correctamente mostrando el siguiente mensaje:

Se ha quitado del DTD XML uno o más fragmentos XML. Se han omitido los subconjuntos externos existentes.


Pero a la hora de intentar trabajar con la variable @doc me sale el siguiente error:

Debe declarar la variable escalar "@doc".



Ya de paso aprovecho para preguntar si conocéis de alguna guía sobre SQL Server ya que voy buscando información según la voy necesitando pero no llego a consolidar nada de forma teórica. Muchas gracias desde ya.

PD: El documento xml es válido y como es lógico pero por si acaso lo digo: donde he ido poniendo 'ruta' obviamente es la ruta completa de mi fichero xml pero para no copiarla entera...  :-X



EDIT RESUELTO: Vale, problema resuelto. Tengo el día tonto y estaba ejecutando únicamente la última sentencia. He seleccionado desde el DECLARE hasta el final y ya funciona correctamente... :rolleyes: :rolleyes:
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;