2008-09-09 17 views
11

Digamos que tengo estructuras de datos almacenadas como XML (tipo de datos XML) dentro de SQL Server. Un usuario desea extraer un registro si, dentro de los datos, se encuentra una determinada cadena.¿La mejor manera de buscar datos almacenados como XML en SQL Server?

¿Cuáles son mis opciones para la implementación de este, y que es la mejor manera de hacerlo?

Tenga en cuenta que cada registro puede tener diferentes estructuras de datos XML.

+0

@patrick las respuestas son mejores, sin duda. – Will

+0

Creo que es un poco descarado que esta cuestión está marcado como duplicado de una pregunta _later_ ... –

Respuesta

3

me encontré con el apoyo XQuery en SQL 2005 muy útil.

-1

Creo que si crees que deberás buscar el XML de forma regular, ahorrarás mucho esfuerzo al extraer algunos de los campos del XML en sus propias columnas en la base de datos. Almacenar el XML como un fragmento de texto no es muy amistoso con las bases de datos: no se puede indexar, almacenar en caché de forma adecuada o utilizar en consultas complejas con facilidad.

-1

Si el código XML es fuertemente tipado, como en usted tiene un esquema, a continuación, utilizar el material de XQuery y construir vistas de la parte superior de las columnas XML. Las cosas fuertemente tipadas no son un requisito, de ninguna manera, pero le permiten construir sus puntos de vista de manera predecible.

5

puede buscar en el XML como una cadena sin usar XQuery mediante su conversión en una cadena y luego usando similares. Sin embargo, como una columna calculada no puede ser parte de una cláusula donde tiene que envolverlo en otra Seleccione la siguiente manera:

SELECT * FROM 
    (SELECT *, CONVERT(varchar(MAX), [XMLData]) as [XMLDataString] FROM [NamedTable]) irrelevant 
WHERE [XMLDataString] like '%SEARCH_STRING%' 
+0

Si el xml es con menor longitud que está bien, pero si tiene un enorme longitud no está funcionando correctamente. Solo se ignoraron los datos parciales convertidos como resto de cadena de los datos – vignesh

+0

@vignesh tiene razón. Si tiene más de 2 gigabytes de datos en su xml varchar (MAX) no será suficiente – Squazz

Cuestiones relacionadas