node - Convierte cadena en xml e inserta Sql Server
sql server xml query (2)
Danos una muestra de tu XML ya que todo esto funcionaría:
CONVERT(XML, ''<root><child/></root>'')
CONVERT(XML, ''<root> <child/> </root>'', 1)
CAST(''<Name><FName>Carol</FName><LName>Elliot</LName></Name>'' AS XML)
También es posible que tenga que convertirlo primero en nvarchar o varbinary (de la documentación de Microsoft):
Puede analizar cualquiera de los tipos de datos de cadena de SQL Server, como [n] [var] char, [n] text, varbinary e image, en el tipo de datos xml mediante casting (CAST) o convirtiendo (CONVERT) la cadena en el tipo de datos xml Untyped XML se comprueba para confirmar que está bien formado. Si hay un esquema asociado con el tipo xml, la validación también se realiza. Para obtener más información, vea Compare Typed XML to Untyped XML.
Los documentos XML se pueden codificar con diferentes codificaciones (por ejemplo, UTF-8, UTF-16, windows-1252). A continuación, se describen las reglas sobre cómo los tipos de fuente binaria y binaria interactúan con la codificación del documento XML y cómo se comporta el analizador.
Como nvarchar supone una codificación unicode de dos bytes, como UTF-16 o UCS-2, el analizador XML tratará el valor de la cadena como un documento o fragmento XML codificado en Unicode de dos bytes. Esto significa que el documento XML debe codificarse en una codificación Unicode de dos bytes para que sea compatible con el tipo de datos de origen. Un documento XML codificado en UTF-16 puede tener una marca de orden de bytes UTF-16 (BOM), pero no es necesario, ya que el contexto del tipo de fuente deja en claro que solo puede ser un documento codificado en Unicode de dos bytes.
El analizador XML trata el contenido de una cadena varchar como un documento / fragmento XML codificado de un byte. Dado que la cadena de origen varchar tiene una página de códigos asociada, el analizador utilizará esa página de códigos para la codificación si no se especifica una codificación explícita en el XML si una instancia XML tiene una lista de materiales o una declaración de codificación, la lista de materiales o declaración debe ser coherente con la página de códigos; de lo contrario, el analizador informará un error.
El contenido de varbinary se trata como una secuencia de punto de código que se pasa directamente al analizador XML. Por lo tanto, el documento o fragmento XML debe proporcionar la BOM u otra información de codificación en línea. El analizador solo mirará la secuencia para determinar la codificación. Esto significa que XML codificado en UTF-16 necesita proporcionar la BOM UTF-16 y una instancia sin BOM y sin una codificación de declaración se interpretará como UTF-8.
Si la codificación del documento XML no se conoce de antemano y los datos se pasan como datos binarios o binarios en lugar de datos XML antes de convertirlos a XML, se recomienda tratar los datos como varbinary. Por ejemplo, al leer datos de un archivo XML usando OpenRowset (), uno debe especificar los datos que se leerán como un valor varbinary (max):
select CAST(x as XML)
from OpenRowset(BULK ''filename.xml'', SINGLE_BLOB) R(x)
SQL Server representa internamente XML en una representación binaria eficiente que usa codificación UTF-16. La codificación proporcionada por el usuario no se conserva, pero se considera durante el proceso de análisis.
Solución:
CONVERT(XML, CONVERT(NVARCHAR(max), ProductXML))
Tenemos una tabla de base de datos de SQL Server 2008 R2 con XML almacenado en una columna del tipo de datos VARCHAR
.
Ahora tengo que buscar algunos de los elementos del xml.
Por lo tanto, quiero convertir primero el xml almacenado como un tipo de datos VARCHAR
a un xml almacenado como tipo de datos xml
.
Ejemplo:
Tabla A
Id(int) , ProductXML (varchar(max))
Tabla B
Id(int), ProductXML(XML)
Quiero convertir el ProductXML
de la Table A
en el tipo de datos XML e insertarlo en la Table B
Intenté usar la función CAST()
y CONVERT()
como se muestra a continuación:
insert into TableB (ProductXML)
select CAST(ProductXML as XML) from TableA;
De manera similar intenté convertir pero recibí un error
Análisis XML: no se puede cambiar la codificación
¿Hay alguna forma de que pueda convertir las entradas varchar
de la tabla en entradas XML?
Acerca de XML: es enorme con muchos nodos y su estructura cambia dinámicamente.
Ejemplo: una fila puede tener una entrada XML para 1 producto y otra fila puede tener una entrada xml para múltiples productos.
Esto funcionó para mí:
select CAST(REPLACE(CAST(column3 AS NVARCHAR(MAX)),''utf-8'',''utf-16'') AS XML) from table