Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: K-YreX en 21 Marzo 2020, 21:03 pm



Título: [Resuelto] Insertar Xml con DTD interno en SQL Server
Publicado por: K-YreX en 21 Marzo 2020, 21:03 pm
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
  1. DECLARE @doc xml
  2. SELECT @doc = (CAST x AS xml) FROM OPENROWSET(BULK 'ruta', SINGLE_BLOB) AS T(x)
  3.  
Pero al intentar ejecutarlo me aparecía el siguiente error:
Código:
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
  1. SELECT @doc = CONVERT(xml, x, 2) FROM OPENROWSET(BULK 'ruta', SINGLE_BLOB) AS T(x)
Parece que se ejecuta correctamente mostrando el siguiente mensaje:
Código:
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:
Código:
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: