Un componente externo está llenando una columna nvarchar
en una tabla con algunos valores. La mayoría de las veces es una cadena legible por humanos, pero ocasionalmente es XML (en el caso de algunas excepciones internas en la compilación de terceros).En SQL Server, ¿cuál es la mejor manera de determinar si una cadena dada es un XML válido o no?
Como una solución temporal (hasta que lo arreglen y usen una cadena siempre), me gustaría analizar los datos XML y extraer el mensaje real.
Entorno: SQL Server 2005; las cadenas tienen siempre menos de 1K de tamaño; podría haber algunos miles de filas en esta tabla.
me encontré con un par de soluciones, pero no estoy seguro de si son lo suficientemente bueno:
- invocación
sp_xml_preparedocument
procedimiento almacenado y se envuelve alrededor del bloque try/catch. Verifique el valor/mango de retorno. - Escribir el código administrado (en C#), una vez más el manejo de excepciones y ver si es una cadena válida.
Ninguno de estos métodos parece eficiente. Estaba buscando algo similar a ISNUMERIC()
: una función ISXML()
. ¿Hay alguna otra forma mejor de verificar la cadena?
¿Por qué cuando 2 soluciones no son suficientes? ¿Qué faltaba? – rene
Si la cadena no comienza con '<' entonces, presumiblemente, usted sabe que definitivamente no es XML. –
@rene: Quise decir "eficiente" :) Las dos soluciones anteriores no suenan escalables si el número de filas aumenta sustancialmente. – Venkat