es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo consultar archivos XML codificados en utf-16 almacenados como varbinary?

Quiero ejecutar una búsqueda de texto completo en archivos XML que se almacenan como varbinary en SQL Server 2016 para encontrar frases (id, nombres, teléfonos, etc.) en esos archivos. El problema es que la consulta no encuentra archivos codificados en UTF-16.

Tengo las siguientes tablas:

Tabla Files:

Id NombreArchivo
1 utf8-encoded.xml
2 utf16-encoded.xml

Tabla FileContent:

Id Contenido Tipo
1 0x444ae9b… XML
2 0x422de56… XML

y una vista:

CREATE VIEW Busqueda 
WITH SCHEMABINDING 
AS 
    SELECT 
        e.Id, e.NombreArchivo, c.[Contenido], c.[Tipo]
    FROM 
        Files AS f 
    INNER JOIN 
        FileContent AS c ON c.Id = f.Id

Luego ejecuto una consulta de búsqueda de texto completo en C# en .NET Framework 4.6.1 utilizando Dapper:

var terminoBusqueda = "xxxxx"; // del usuario
var consulta = "SELECT * FROM Busqueda b WHERE CONTAINS(b.Contenido, @terminoBusqueda)";
var datos = connection.Query<Archivo>(consulta, new {terminoBusqueda});
...

Cambiar el parámetro de Dapper a concatenación de cadena inyectable de SQL como esto: WHERE CONTAINS(b.Contenido, " + terminoBusqueda" + ")" no cambia nada.

La consulta encuentra archivos XML codificados en UTF-8 pero no codificados en UTF-16. Creo que este no es un problema relacionado con Dapper.

¿Cómo puedo solucionar esto para poder encontrar archivos XML codificados en UTF-16 también? ¿La búsqueda de texto completo de SQL Server incluso funciona con archivos XML codificados en UTF-16?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Ejecutando la búsqueda de texto completo en archivos XML codificados en UTF-16 almacenados como varbinary en SQL Server

    Para poder encontrar frases como identificadores, nombres y números de teléfono en archivos XML almacenados como varbinary en SQL Server 2016 utilizando la búsqueda de texto completo, se puede crear una vista que una las tablas “Files” y “FileContent” y ejecute una consulta de búsqueda de texto completo en .NET utilizando Dapper. Sin embargo, es posible que la consulta no encuentre archivos XML codificados en UTF-16.

    El problema con la búsqueda de archivos XML codificados en UTF-16

    La consulta en el código proporcionado encuentra archivos XML codificados en UTF-8 pero no en UTF-16. Esto se debe a que la búsqueda de texto completo de SQL Server puede no funcionar con archivos XML codificados en UTF-16.

    Posibles soluciones

    Una posible solución es convertir los datos varbinary a nvarchar y almacenarlos en una columna separada. Esto permite que la búsqueda de texto completo de SQL Server funcione con los datos de texto convertidos.

    Otra solución es utilizar XQuery para consultar directamente los datos XML. Sin embargo, esto puede no ser tan eficiente como la búsqueda de texto completo.

    Conclusión

    Para solucionar el problema de que la búsqueda de texto completo no encuentre archivos XML codificados en UTF-16, puede ser necesario convertir los datos varbinary a nvarchar o utilizar XQuery para consultar directamente los datos XML.

Comments are closed.