Cambios recientes en las características del Motor de base de datos de SQL Server 2008

En este tema, se describen cambios importantes introducidos en Database Engine (Motor de base de datos). Estos cambios pueden provocar errores en aplicaciones, scripts o funcionalidades que estén basadas en versiones anteriores de SQL Server. Estos problemas se pueden presentar al llevar a cabo la actualización. Para obtener más información, vea Usar el Asesor de actualizaciones para preparar las actualizaciones.

Intercalaciones

Característica

Descripción

Nuevas intercalaciones

SQL Server 2008 presenta nuevas intercalaciones que se ajustan totalmente con las que proporciona Windows Server 2008. Estas 80 nuevas intercalaciones han mejorado la precisión lingüística, y para distinguirlas se ha usado *_100 en el nombre de la versión. Si elige una nueva intercalación para el servidor o la base de datos, tenga presente que es posible que los clientes que dispongan de controladores de clientes antiguos no la reconozcan. Las intercalaciones no reconocidas pueden provocar errores en la aplicación. Considere las soluciones siguientes:

  • Actualice el sistema operativo del cliente para que se actualicen las intercalaciones del sistema subyacentes.

  • Si el cliente tiene instalado software de cliente de base de datos, plantéese la posibilidad de aplicar una actualización de servicio a dicho software.

  • Elija una intercalación existente que se corresponda con una página de códigos del cliente.

Para obtener más información, vea Establecer y cambiar intercalaciones.

Common Language Runtime (CLR)

Característica

Descripción

Ensamblados CLR

Cuando se actualiza una base de datos a SQL Server 2008, automáticamente se instala el ensamblado Microsoft.SqlServer.Types para admitir los nuevos tipos de datos. Las reglas del Asesor de actualizaciones detectan los tipos de usuarios o los ensamblados con nombres problemáticos. El Asesor de actualizaciones aconsejará el cambio de nombre de los ensamblados problemáticos, y en cuanto a los tipos problemáticos, aconsejará el cambio de nombre o el uso de nombres que consten de dos partes en el código para hacer referencia al tipo de usuario existente.

Si una actualización de la base de datos detecta un ensamblado del usuario con un nombre problemático, automáticamente cambiará el nombre de dicho ensamblado y colocará la base de datos en modo de sospecha.

Si durante la actualización se encuentra un tipo de usuario con un nombre problemático, no se llevará a cabo ningún procedimiento especial. Después de la actualización, existirán tanto el tipo de usuario anterior como el nuevo tipo de sistema. El tipo de usuario solo estará disponible a través de nombres de dos partes.

Ensamblados CLR

SQL Server 2008 instala .NET Framework 3.5 SP1, que se encarga de actualizar las bibliotecas de la memoria caché de ensamblados global (GAC). Si tiene bibliotecas no admitidas registradas en una base de datos de SQL Server, es posible que la aplicación de SQL Server deje de funcionar después de realizar la actualización a SQL Server 2008. El motivo es que cuando se da servicio o se actualizan bibliotecas de la GAC, no se actualizan los ensamblados de SQL Server. Si un ensamblado existe tanto en una base de datos de SQL Server como en la GAC, las dos copias deberán coincidir exactamente. Si no coinciden, se producirá un error cuando la integración CLR de SQL Server use el ensamblado. Para obtener más información, vea Bibliotecas de .NET Framework admitidas.

Después de actualizar la base de datos, dé servicio o actualice la copia del ensamblado situada en las bases de datos de SQL Server con la instrucción ALTER ASSEMBLY. Para obtener más información, vea el artículo 949080 de Knowledge Base.

Para saber si está usando una biblioteca de .NET Framework no admitida en la aplicación, ejecute la consulta siguiente en la base de datos.

SELECT name FROM sys.assemblies WHERE clr_name LIKE '%publickeytoken=b03f5f7f11d50a3a,%';

Rutinas de CLR

El uso de la suplantación en las funciones CLR definidas por el usuario, los agregados definidos por el usuario o los tipos definidos por el usuario (UDT) puede provocar el error 6522 en la aplicación después de la actualización a SQL Server 2008.

La actualización se realiza correctamente en los escenarios de SQL Server 2005 siguientes, pero no así en SQL Server 2008. Se proporcionan soluciones para cada escenario.

  1. Una función CLR definida por el usuario, un agregado definido por el usuario o un método UDT que utiliza la suplantación tiene un parámetro de tipo nvarchar(max), varchar(max), varbinary(max), ntext, text, image o un UDT grande, y no tiene el atributo DataAccessKind.Read en el método.

    Para resolver este problema, agregue el atributo DataAccessKind.Read al método, vuelva a compilar el ensamblado e implemente de nuevo la rutina y el ensamblado.

  2. Una función CLR con valores de tabla que tiene un método Init que realiza la suplantación.

    Para resolver este problema, agregue el atributo DataAccessKind.Read al método, vuelva a compilar el ensamblado e implemente de nuevo la rutina y el ensamblado.

  3. Una función CLR con valores de tabla que tiene un método FillRow que realiza la suplantación.

    Para resolver este problema, quite la suplantación del método FillRow. No utilice el método FillRow para tener acceso a los recursos externos. En lugar de ello, utilice el método Init.

Vistas de administración dinámica

Vista

Descripción

sys.dm_os_sys_info

Se quitan las columnas sqlserver_start_time_cpu_ticks y cpu_ticks_in_ms.

sys.dm_exec_query_resource_semaphores sys.dm_exec_query_memory_grants

La columna resource_semaphore_id no es un identificador único en SQL Server 2008. Este cambio puede afectar a la solución de problemas relacionados con la ejecución de la consulta. Para obtener más información, vea sys.dm_exec_query_resource_semaphores (Transact-SQL).

Errores y eventos

Característica

Descripción

Errores de inicio de sesión

En SQL Server 2005, se devuelve el error 18452 cuando se usa un inicio de sesión de SQL para conectar con un servidor que está configurado para usar únicamente la autenticación de Windows. En SQL Server 2008, se devuelve el error 18456 en su lugar.

Plan de presentación

Característica

Descripción

Esquema XML del plan de presentación

Se agrega un nuevo elemento SeekPredicateNew al esquema XML del plan de presentación, y la secuencia xsd envolvente (SqlPredicatesType) se convierte en un elemento <xsd:choice>. En lugar de uno o varios elementos SeekPredicate, ahora pueden aparecer uno o varios elementos SeekPredicateNew en el XML del plan de presentación. Estos dos elementos se excluyen mutuamente. SeekPredicate se mantiene en el esquema XML del plan de presentación por compatibilidad con versiones anteriores; sin embargo, los planes de consulta creados en SQL Server 2008 pueden contener el elemento SeekPredicateNew. En las aplicaciones que solo esperan recuperar el elemento secundario SeekPredicate del nodo ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/RelOp/IndexScan/SeekPredicates se puede producir un error si el elemento SeekPredicate no existe. Modifique el código de la aplicación para que espere el elemento SeekPredicate o SeekPredicateNew en este nodo. Para obtener más información, vea Mejoras de procesamiento de consultas en las tablas e índices con particiones.

Esquema XML del plan de presentación

Se ha agregado un nuevo atributo IndexKind al tipo complejo ObjectType en el esquema XML del plan de presentación. En las aplicaciones que validen de forma estricta los planes de SQL Server con el esquema de SQL Server 2005 se producirá un error.

Transact-SQL

Característica

Descripción

Evento ALTER_AUTHORIZATION_DATABASE DDL

En SQL Server 2005, cuando se desencadena el evento ALTER_AUTHORIZATION_DATABASE de DDL, se devuelve el valor 'object' en el elemento ObjectType del xml EVENTDATA para este evento si el tipo de entidad del elemento protegible en la operación del lenguaje de definición de datos (DDL) es un objeto. En SQL Server 2008, se devuelve el tipo real (por ejemplo, 'table' o 'function').

CONVERT

Si se pasa un estilo no válido a la función CONVERT, se devuelve un error cuando el tipo de conversión es de binario a carácter o de carácter a binario. En las versiones anteriores de SQL Server, se establece un estilo no válido como estilo predeterminado para las conversiones de binario a carácter y de carácter a binario.

GRANT/DENY/REVOKE EXECUTE en ensamblados

No se puede conceder, denegar ni revocar el permiso EXECUTE en los ensamblados. Este permiso no tiene ningún efecto y ahora produce un error. En su lugar, conceda, deniegue o revoque el permiso EXECUTE en los procedimientos almacenados o en las funciones que hacen referencia el método de ensamblado.

Permisos GRANT/DENY/REVOKE en los tipos del sistema

No se pueden conceder, denegar ni revocar permisos en los tipos del sistema. En versiones anteriores de SQL Server, estas instrucciones se ejecutaban correctamente, pero no tenían ningún efecto. En SQL Server 2008, se devuelve un error.

Cláusula OUTPUT

Para evitar un comportamiento no determinista, la cláusula OUTPUT no puede hacer referencia a una columna desde una vista o una función insertada con valores de tabla si dicha tabla se ha definido mediante uno de los métodos siguientes:

  • Una subconsulta.

  • Una función definida por el usuario que obtiene acceso a datos de usuario o del sistema, o que se asume que obtiene dicho acceso.

  • Una columna calculada que contiene en su definición una función definida por el usuario que obtiene acceso a datos de usuario o del sistema.

Cuando SQL Server detecta este tipo de columna en la cláusula OUTPUT, se produce el error 4186. Para obtener más información, vea MSSQLSERVER_4186.

Cláusula OUTPUT INTO

La tabla de destino de la cláusula OUTPUT INTO no puede tener desencadenadores habilitados.

Opción precompute rank de nivel de servidor

Esta opción no se admite en SQL Server 2008. Modifique las aplicaciones que actualmente utilizan esta característica lo antes posible.

Sugerencia de tabla READPAST

No se podrá especificar la sugerencia de tabla READPAST cuando la opción de base de datos READ_COMMITTED_SNAPSHOT esté establecida en ON y se cumpla alguna de las condiciones siguientes:

  • El nivel de aislamiento de transacción de la sesión es READ COMMITTED.

  • La sugerencia de tabla READCOMMITTED también se especifica en la consulta.

Para especificar la sugerencia READPAST en estos casos, quite la sugerencia de tabla READCOMMITTED, si está presente, e incluya la sugerencia de tabla READCOMMITTEDLOCK en la consulta.

sp_helpuser

Los nombres de columna siguientes que se devuelven en el conjunto de resultados del procedimiento almacenado sp_helpuser han cambiado.

Nombre de columna anteriorNombre de columna nuevo
GroupNameRoleName
Group_nameRole_name
Group_idRole_id
Users_in_groupUsers_in_role

Cifrado de datos transparente

El cifrado de datos transparente (TDE) se realiza en el nivel de E/S: la estructura de la página no está cifrada en la memoria y se cifra solo cuando la página se escribe en el disco. Se cifran tanto los archivos de base de datos como los archivos de registro. En las aplicaciones de terceros que omitan el mecanismo habitual de SQL Server para tener acceso a las páginas (por ejemplo, examinando los datos o los archivos de registro directamente), se producirá un error si una base de datos emplea TDE debido a que los datos están cifrados en los archivos. Estas aplicaciones pueden aprovechar la API criptográfica de Windows para desarrollar una solución que permita descifrar los datos desde fuera de SQL Server.

XQuery

Característica

Descripción

Compatibilidad con la fecha y la hora

En SQL Server 2005, los tipos de datos xs:time, xs:date y xs:dateTime no son compatibles con las zonas horarias. Los datos de la zona horaria se asignan a la zona horaria UTC. SQL Server 2008 tiene el comportamiento de compatibilidad estándar, lo que se traduce en los cambios siguientes:

  • Se validan los valores sin zona horaria.

  • Se conserva la zona horaria proporcionada o la ausencia de zona horaria.

  • Se modifica la representación del almacenamiento interno.

  • Se aumenta la resolución de los valores almacenados.

  • No se permiten los años negativos.

Modifique las aplicaciones y las expresiones XQuery para tener en cuenta los nuevos valores de tipos. Para obtener más información, vea Usar XML con tipos de datos de time, date, datetime2 y datetimeoffset.

Expresiones de XQuery y XPath

En SQL Server 2005, se permiten los pasos de una expresión de XQuery o XPath que comienzan con un signo de dos puntos (':'). Por ejemplo, la instrucción siguiente contiene una prueba del nombre (CTR02) dentro de la expresión de ruta de acceso que comienza con dos puntos.

SELECT FileContext.query('for n$ in //CTR return <C>{data )(n$/:CTR02)} </C>) AS Files FROM dbo.MyTable;

En SQL Server 2008, este uso se rechaza porque no cumple los estándares de XML. Se devuelve el error 9341. Quite el signo de dos puntos inicial o especifique un prefijo para la prueba del nombre, por ejemplo (n$/p1:CTR02) o (n$/CTR02).

Historial de cambios

Contenido actualizado

Se ha agregado un cambio importante en las expresiones de XPath y XQuery.