Novedades de SQLXML 4.0 SP1

Se aplica a:SQL ServerAzure SQL Database

Microsoft SQLXML 4.0 SP1 incluye varias actualizaciones y mejoras. En este tema se resumen las actualizaciones y se proporcionan vínculos a información más detallada, si está disponible. SQLXML 4.0 SP1 proporciona mejoras adicionales para admitir los nuevos tipos de datos introducidos de SQL Server 2008 (10.0.x). En esta sección se incluyen los siguientes temas:

  • Instalar SQLXML 4.0 SP1

  • Problemas de la instalación simultánea

  • SQLXML 4.0 y MSXML

  • Redistribuir SQLXML 4.0

  • Compatibilidad con SQL Server Native Client

  • Compatibilidad con los tipos de datos en SQL Server 2005 (9.x)

  • Cambios de carga masiva XML en SQLXML 4.0

  • Cambios de claves del Registro en SQLXML 4.0

  • Problemas de migración

Instalar SQLXML 4.0 SP1

Antes de SQL Server 2008 (10.0.x), SQLXML 4.0 se comercializó junto con SQL Server y formó parte de la instalación predeterminada de todas las versiones de SQL Server, salvo SQL Server Express. A partir de SQL Server 2008 (10.0.x), la versión más reciente de SQLXML (SQLXML 4.0 SP1) ya no está incluida en SQL Server. Para instalar SQLXML 4.0 SP1, descárguelo desde Ubicación de instalación para SQLXML 4.0 SP1.

Los archivos de SQLXML 4.0 SP1 se instalan en la ubicación siguiente:

%PROGRAMFILES%\SQLXML 4.0\

Nota:

Como parte del proceso de instalación de SQLXML 4.0, se realiza una configuración adecuada del Registro.

Para permitir que las aplicaciones SQLXML de 32 bits se ejecutan bajo Windows on Windows (WOW64) en los sistemas operativos Windows de 64 bits, ejecute el paquete SQLXML 4.0 SP1 de 64 bits, llamado sqlxml4.msi, que puede encontrar en el Centro de descarga.

Desinstalar SQLXML 4.0 SP1

Existen claves del Registro compartidas entre SQLXML 3.0 SP3, SQLXML 4.0 y SQLXML 4.0 SP1. Si las versiones más recientes de SQLXML se desinstalan en el mismo equipo que contiene SQLXML 3.0 SP3, podría necesitar reinstalar SQLXML 3.0 SP3.

Problemas de la instalación simultánea

El proceso de instalación de SQLXML 4.0 no quita los archivos instalados con versiones anteriores de SQLXML. Por lo tanto, es posible que el equipo tenga archivos DLL para instalaciones de SQLXML de distinta versión. Puede ejecutar las instalaciones simultáneamente. SQLXML 4.0 incluye PROGID independientes y dependientes de la versión. Todas las aplicaciones de producción deben usar PROGID dependientes de la versión.

SQLXML 4.0 SP1 y MSXML

SQLXML 4.0 no instala MSXML. SQLXML 4.0 utiliza MSXML 6.0, que se instala como parte de la instalación de SQL Server 2005 (9.x) o una instalación posterior.

Redistribuir SQLXML 4.0 SP1

Puede distribuir SQLXML 4.0 SP1 mediante el paquete de instalación redistribuible. Una manera de instalar varios paquetes en lo que al usuario le parece ser una instalación única es usar tecnología de encadenador y arranque. Para obtener más información, vea Authoring a Custom Bootstrapper Package for Visual Studio 2005 (Crear un paquete de arranque personalizado para Visual Studio 2005) y Adding Custom Prerequisites (Agregar requisitos previos personalizados).

Si su aplicación está diseñada para una plataforma distinta de aquella en la que se desarrolló, puede descargar versiones de sqlncli.msi para x64, Itanium y x86 en el Centro de descarga de Microsoft.

También existen programas de instalación de redistribución independientes para MSXML 6.0 (msxml6.msi). Puede encontrarlos en el CD de instalación de SQL Server en la ubicación siguiente:

%CD%\Setup\

Estos archivos de instalación pueden utilizarse para instalar MSXML 6.0 directamente desde el CD. También pueden utilizarse para redistribuir libremente MSXML 6.0 junto con SQLXML 4.0 SP1 con sus propias aplicaciones personalizadas.

También necesitará redistribuir SQL Server Native Client si lo utiliza como proveedor de datos con la aplicación. Para obtener más información, vea Instalar SQL Server Native Client.

Compatibilidad con SQL Server Native Client

SQLXML 4.0 admite los proveedores SQLOLEDB y SQL Server Native Client. Se recomienda usar la misma versión del proveedor de SQL Server Native Client y SQL Server porque SQL Server Native Client se desarrolla para admitir los nuevos tipos de datos que se envían en el servidor, como los tipos de datos Date, Time, DateTime2 y dateTimeOffset en SQL Server 2008 (10.0.x) y compatibles con SQL Server Native Client.

Nota:

SQL Server Native Client se ha quitado en SQL Server 2022 (16.x).

SQL Server Native Client es una tecnología de acceso a datos que se introdujo en SQL Server 2005 (9.x). Combina el proveedor SQLOLEDB y el controlador SQLODBC en una biblioteca de vínculos dinámicos (DLL) nativa, a la vez que ofrece una nueva funcionalidad independiente y distinta de Microsoft Data Access Components (MDAC).

SQL Server Native Client puede utilizarse para crear nuevas aplicaciones o mejorar las aplicaciones existentes que necesitan aprovechar las características introducidas en SQL Server que no son compatibles con SQLOLEDB ni SQLODBC en MDAC y Microsoft Windows. Por ejemplo, es necesario usar SQL Server Native Client para las características SQLXML del lado cliente, como FOR XML, a fin de usar el tipo de datos xml. Para obtener más información, vea Formato XML del lado cliente (SQLXML 4.0), Uso de ADO para ejecutar consultas SQLXML 4.0 y Programación de SQL Server Native Client.

Nota:

SQLXML 4.0 no es totalmente compatible con versiones anteriores a SQLXML 3.0. Debido a algunas correcciones de errores y otros cambios funcionales, en especial la eliminación de la compatibilidad SQLXML ISAPI, no pueden utilizarse directorios virtuales de IIS con SQLXML 4.0. Aunque la mayoría de las aplicaciones se ejecutarán con modificaciones menores, debe probarlas antes de pasarlas a producción con SQLXML 4.0.

Compatibilidad con los tipos de datos en SQL Server 2005 y SQL Server 2008

SQL Server 2005 (9.x) introdujo el tipo de datos xml y SQLXML 4.0 admite el tipo de datos xml. Para más información, consulte Compatibilidad con tipos de datos xml en SQLXML 4.0.

Para obtener ejemplos sobre la forma de utilizar el tipo de datos xml en SQLXML al asignar vistas XML, cargar datos XML de forma masiva o ejecutar diagramas de actualización XML, vea los ejemplos que se incluyen en los temas siguientes.

SQL Server 2008 (10.0.x) introdujo los tipos de datos Date, Time, DateTime2 y DateTimeOffset. SQLXML 4.0 SP1 habilitará estos cuatro nuevos tipos de datos como tipos escalares integrados cuando se usan con el proveedor OLE DB (SQLNCLI.11) de SQL Server Native Client, que se distribuye con SQL Server 2012 (11.x).

Importante

SQL Server Native Client (a menudo abreviado SNAC) se ha quitado de SQL Server 2022 (16.x) y SQL Server Management Studio 19 (SSMS). No se recomienda SQL Server Native Client (SQLNCLI o SQLNCLI11) ni el proveedor OLE DB de Microsoft heredado para SQL Server (SQLOLEDB) para el desarrollo de nuevas aplicaciones. Cambie al nuevo controlador OLE DB de Microsoft (MSOLEDBSQL) para SQL Server o al controlador ODBC de Microsoft ODBC Driver for SQL Server más reciente de ahora en adelante. Para SQLNCLI que se incluye como componente de motor de base de datos de SQL Server (versiones 2012 a 2019), consulte esta excepción de ciclo de vida de soporte técnico.

Cambios de carga masiva XML en SQLXML 4.0 SP1

  • Para SQLXML 4.0, el campo de desbordamiento SchemaGen se crea mediante el tipo de datos xml. Para obtener más información, vea Modelo de objetos de carga masiva XML de SQL Server.

  • Si previamente ha creado aplicaciones de Microsoft Visual Basic y desea usar SQLXML 4.0, debe volver a compilar la aplicación con referencia a Xblkld4.dll.

  • En aplicaciones de Visual Basic Scripting Edition, deberá registrar el archivo DLL que desee utilizar. En el ejemplo siguiente, si especifica PROGID independientes de la versión, la aplicación dependerá del último archivo DLL registrado:

    set objBulkLoad = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad")   
    

    Nota:

    El PROGID dependiente de la versión es SQLXMLBulkLoad.SQLXMLBulkLoad.4.0.

Cambios de claves del Registro en SQLXML 4.0

En SQLXML 4.0, las claves del Registro han cambiado a los siguientes valores con respecto a versiones anteriores:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SQLXML4\TemplateCacheSize

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SQLXML4\SchemaCacheSize

Debe cambiar los valores si desea que estas claves estén vigentes para SQLXML 4.0.

Además, SQLXML 4.0 introduce las siguientes claves del Registro:

  • HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\ReportErrorsWithSQLInfo

    De manera predeterminada, SQLXML 4.0 devuelve la información de errores nativos que proporcionan OLE DB y SQL Server en lugar de un error SQLXML de alto nivel (como sucedía en versiones anteriores de SQLXML). Si no desea usar este comportamiento, el valor de esta clave del Registro de tipo DWORD debe establecerse en 0 (el valor predeterminado es 1).

  • HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\FORXML_GenerateGUIDBraces

    De forma predeterminada, SQLXML devuelve los valores GUID de SQL Server sin incluirlos entre llaves. Si desea que el valor GUID devuelto con las llaves (por ejemplo, {some GUID}), el valor de esta clave del Registro debe establecerse en 1 (el valor predeterminado es 0).

  • HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\SQL2000CompatMode

    De forma predeterminada, cuando el analizador XML carga los datos, los espacios en blanco se normalizan conforme a las reglas de XML 1.0. Esto provoca la pérdida de algunos caracteres de espacio en blanco en los datos. De este modo, es posible que la representación textual de los datos no sea la misma después del análisis, aunque semánticamente los datos sean los mismos.

    Esta clave se incluye para que pueda elegir si desea mantener los caracteres de espacio en blanco en los datos. Si agrega esta clave del Registro y establece su valor en 0, los caracteres de espacio en blanco (LF, CR y tabulación) del código XML se devuelven codificados en el caso de los valores de atributo. En el caso de los valores de elemento, solamente CR se devuelve codificado.

    Por ejemplo:

    CREATE TABLE T( Col1 int, Col2 nvarchar(100));  
    GO  
    -- Insert data with tab, line feed and carriage return).  
    INSERT INTO T VALUES (1, 'This is a tab    . This is a line feed and CR   
     more text');  
    GO  
    -- Test this query (without the registry key).  
    SELECT * FROM T   
    FOR XML AUTO;  
    -- This is the result (no encoding of special characters).  
    <?xml version="1.0" encoding="utf-8" ?>  
    <r>  
      <T Col1="1"   
         Col2="This is a tab    . This is a line feed and CR   
     more text"/>  
    </r>  
    -- Now add registry key with value 0 and execute the query again.  
    -- Note the encoding for carriage return, line-feed and tab in the attribute value.  
    <?xml version="1.0" encoding="utf-8" ?>  
    <r>  
      <T Col1="1"   
         Col2="This is a tab    . This is a line feed and CR   
     more text"/>  
    </r>  
    
    -- Update the query and specify ELEMENTS directive  
    SELECT * FROM T  
    FOR XML AUTO, ELEMENTS  
    -- Only the carriage return is returned encoded.  
    <?xml version="1.0" encoding="utf-8" ?>  
    <r>  
       <T>  
          <Col1>1</Col1>  
          <Col2>This is a tab    . This is a line feed and CR   
     more text</Col2>  
       </T>  
    </r>  
    

Problemas de migración

A continuación se indican una serie de problemas que pueden afectar a la migración de aplicaciones SQLXML heredadas a SQLXML 4.0.

Consultas SQLXML 4.0 y ADO

En versiones anteriores de SQLXML, se proporcionaba compatibilidad para la ejecución de consultas basadas en URL mediante el uso de directorios virtuales de IIS y el filtro SQLXML ISAPI. En aplicaciones que utilizan SQLXML 4.0, esta compatibilidad ya no está disponible.

Ahora, las consultas, plantillas y diagramas de actualización SQLXML pueden ejecutarse mediante las extensiones SQLXML a Objetos de datos ActiveX (ADO), que se introdujeron por primera vez en Microsoft Data Access Components (MDAC) 2.6 y versiones posteriores.

Para obtener más información, consulte Uso de ADO para ejecutar consultas SQLXML 4.0.

Compatibilidad con SQLXML 3.0 ISAPI y tipos de datos introducidos en SQL Server 2005

Dado que la compatibilidad con ISAPI se ha quitado de SQLXML 4.0, si la solución requiere las características mejoradas de escritura de datos introducidas en SQL Server 2005 (9.x), como el tipo de datos xml o los tipos de datos definidos por el usuario (UDT) y el acceso basado en web, deberá usar otra solución, como clases administradas SQLXML u otro tipo de controlador HTTP, por ejemplo, Servicios web XML nativos para SQL Server 2005.

Como alternativa, si no necesita estas extensiones de tipo, puede seguir usando SQLXML 3.0 para conectarse a las instalaciones de SQL Server 2005 (9.x) y SQL Server 2008 (10.0.x). La compatibilidad con SQLXML 3.0 ISAPI funcionará con estas versiones posteriores, pero no admitirá ni reconocerá los tipos de datos xml y UDT introducidos en SQL Server 2005 (9.x).

Cambios de seguridad de la carga masiva XML para archivos temporales

En SQLXML 4.0 y SQL Server, los permisos de archivo de carga masiva XML se conceden al usuario que ejecuta la operación de carga masiva. Los permisos de lectura y escritura se heredan del sistema de archivos. En versiones anteriores de SQLXML y SQL Server, la carga masiva XML en SQLXML creaba archivos temporales que no estaban protegidos y que podía leer cualquier usuario.

Problemas de migración en consultas FOR XML del lado cliente

Debido a los cambios en el motor de ejecución, SQL Server podría devolver valores diferentes en los metadatos de una tabla básica de lo que se devolvería si la consulta FOR XML se ejecutó en SQL Server 2000 (8.x). En los casos en los que esto ocurre, el formato del lado cliente de los resultados de la consulta FOR XML será diferente según la versión en la que se ejecute la consulta.

Si una consulta FOR XML se ejecuta del lado cliente utilizando SQLXML 3.0 en una columna de tipo de datos xml, los datos de los resultados se devolverán como una cadena con entidades. En SQLXML 4.0, si se especifica SQL Server Native Client (SQLNCLI11) como proveedor, los datos se devolverán como XML.