Novedades de SQLXML 4.0 SP1
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 de SQL Server 2008. 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 introducidos en SQL Server 2005
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, 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, 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 una vez que esté disponible, descárguelo desde esta ubicación de instalación para SQLXML 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 o SQL Server 2008.
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 programa previo. Para obtener más información, vea la sección Crear un paquete de programa previo personalizado para Visual Studio 2005 y 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 que use la misma versión del proveedor SQL Server Native Client y SQL Server, porque SQL Server Native Client se desarrolló para dar compatibilidad a los nuevos tipos de datos que se incluyen en el servidor, como los tipos de datos Date, Time, DateTime2 y dateTimeOffset de que son admitidos por SQL Server 2008 Native Client.
SQL Server Native Client es una tecnología de acceso a datos introducida en SQL Server 2005. 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 Aplicación de formato XML en el cliente (SQLXML 4.0), Utilizar ADO para ejecutar consultas SQLXML 4.0 y Programación de SQL Server 2008 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 introdujo el tipo de datos xml; SQLXML 4.0 admite el tipo de datos xml. Para obtener más información, vea 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 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.10) de SQL Server 2008 Native Client, que se distribuye con SQL Server 2008.
Cambios de carga masiva XML en SQLXML 4.0 SP1
En SQLXML 4.0, el campo de desbordamiento SchemaGen se crea utilizando 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 forma 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 se devuelva con las llaves (por ejemplo, {algún 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, vea Utilizar 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 de tipos de datos mejorados introducidas en SQL Server 2005, como el tipo de datos xml o los tipos de datos definidos por el usuario (UDT) y el acceso basado en web, deberá utilizar otra solución, como las clases administradas SQLXML u otro tipo de controlador HTTP, como los Servicios web XML nativos para SQL Server 2005.
Si no requiere estas extensiones de tipo, puede continuar utilizando SQLXML 3.0 para conectarse a instalaciones de SQL Server 2005 y SQL Server 2008. 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.
Cambios de seguridad de la carga masiva XML para archivos temporales
En SQLXML 4.0 y SQL Server 2005 o SQL Server 2008, 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 realizados en el motor de ejecución, SQL Server 2005 y SQL Server 2008 pueden devolver valores diferentes en los metadatos de una tabla base con respecto a los valores que se devolverían si la consulta FOR XML se ejecutase en SQL Server 2000. 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 (SQLNCLI10) como proveedor, los datos se devolverán como XML.