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

En este tema se describen los principales cambios en SQL Server 2012 Motor de base de datos y versiones anteriores de SQL Server. Estos cambios pueden provocar errores en las aplicaciones, los scripts o las funcionalidades que estén basadas en versiones anteriores de SQL Server. Podría encontrar estos problemas al actualizar. Para obtener más información, vea Usar el Asesor de actualizaciones para preparar las actualizaciones.

En este tema

Últimos cambios en SQL Server 2012

Principales cambios de SQL Server 2008/SQL Server 2008R2

Últimos cambios en SQL Server 2005

Últimos cambios de SQL Server 2012

Transact-SQL

Característica

Descripción

Seleccionar en columnas o tablas denominadas NEXT.

Las secuencias utilizan la función NEXT VALUE FOR del estándar ANSI. Si una tabla o una columna se denominan NEXT y alguna tiene el alias VALUE, y además el estándar ANSI AS se omite, la instrucción resultante puede producir un error. Para evitar el problema, incluya la palabra clave AS del estándar ANSI. Por ejemplo, SELECT NEXT VALUE FROM Table se debería reescribir como SELECT NEXT AS VALUE FROM Table y SELECT Col1 FROM NEXT VALUE se debería reescribir como SELECT Col1 FROM NEXT AS VALUE.

PIVOT, operador

El operador PIVOT no está permitido en una consulta de expresión de tabla común recursiva (CTE) cuando el nivel de compatibilidad está establecido en 110. Vuelva a escribir la consulta o cambie el nivel de compatibilidad a 100 o un valor inferior. Con PIVOT en una consulta CTE se producen resultados incorrectos cuando hay varias filas individuales por agrupación.

sp_setapprole y sp_unsetapprole

El parámetro OUTPUT de la cookie para sp_setapprole está documentado actualmente como varbinary(8000), que es la longitud máxima correcta. Sin embargo, la implementación actual devuelve varbinary(50). Las aplicaciones deben seguir reservando varbinary(8000) para que la aplicación siga funcionando correctamente si el tamaño de retorno de la cookie aumenta en una versión futura. Para obtener más información, vea sp_setapprole (Transact-SQL).

EXECUTE AS

El parámetro OUTPUT de la cookie para EXECUTE AS está documentado actualmente como varbinary(8000), que es la longitud máxima correcta. Sin embargo, la implementación actual devuelve varbinary(100). Las aplicaciones deben seguir reservando varbinary(8000) para que la aplicación siga funcionando correctamente si el tamaño de retorno de la cookie aumenta en una versión futura. Para obtener más información, vea EXECUTE AS (Transact-SQL).

sys.fn_get_audit_file función

Se han agregado dos columnas adicionales (user_defined_event_id y user_defined_information) para respaldar los eventos de auditoría definidos por el usuario. Las aplicaciones que no seleccionan columnas por nombre pueden devolver más columnas de las previstas. Seleccione las columnas por nombre o ajuste la aplicación para aceptar estas columnas adicionales.

Operaciones CAST y CONVERT en columnas calculadas de tipo time o datetime2

En versiones anteriores a SQL Server, el estilo predeterminado de las operaciones CAST y CONVERT en tipos de datos time y datetime2 es 121, a menos que se utilice otro tipo en una expresión de columna calculada. Para las columnas calculadas, el estilo predeterminado es 0. Este comportamiento afecta a las columnas calculadas cuando se crean, cuando se utilizan en las consultas que implican parametrización automática o cuando se usan en definiciones de restricciones.

Bajo el nivel de compatibilidad 110, el estilo predeterminado de las operaciones CAST y CONVERT en los tipos de datos time y datetime2 es siempre 121. Si su consulta se basa en el comportamiento anterior, use un nivel de compatibilidad menor de 110, o especifique explícitamente el estilo 0 en la consulta correspondiente.

Actualizar la base de datos al nivel de compatibilidad 110 no cambiará los datos de usuario que se hayan almacenado en disco. Debe corregir manualmente estos datos según convenga. Por ejemplo, si utilizara SELECT INTO para crear una tabla de un origen que contuviera una expresión de columna calculada como la descrita anteriormente, se almacenarían los datos (si se usa el estilo 0) en lugar de la propia definición de columna calculada. Debería actualizar manualmente estos datos para que coincidieran con el estilo 121.

ALTER TABLE

La instrucción ALTER TABLE solo permite nombres de tabla de dos partes (esquema.objeto). Si ahora se especifica un nombre de tabla con uno de los siguientes formatos se produce el error 117 en el tiempo de compilación.

  • servidor.baseDeDatos.esquema.tabla

  • .baseDeDatos.esquema.tabla

  • ..esquema.tabla

En versiones anteriores, al especificar el formato servidor.baseDeDatos.esquema.tabla se devolvía el error 4902. La especificación del formato .baseDeDatos.esquema.tabla o ..esquema.tabla se realizaba correctamente.

Para resolver el problema, quite el uso de un prefijo de 4 partes.

Examinar los metadatos

Al consultar una vista con FOR BROWSE o SET NO_BROWSETABLE ON, ahora se devuelven los metadatos de la vista, no los metadatos del objeto subyacente. Este comportamiento ahora se corresponde al de otros métodos de examinar los metadatos.

SOUNDEX

Bajo el nivel 110 de la compatibilidad de la base de datos, la función SOUNDEX implementa las nuevas reglas que pueden causar que los valores computados por la función sean diferentes que los valores computados bajo niveles anteriores de compatibilidad. Después de actualizar al nivel de compatibilidad 110, es posible que tenga que volver a generar los índices, los montones o las restricciones CHECK que usan la función SOUNDEX. Para obtener más información, vea SOUNDEX (Transact-SQL).

Mensaje de recuento de filas para las instrucciones DML con error

En SQL Server 2012, Motor de base de datos enviará de forma coherente el token TDS DONE con RowCount: 0 a los clientes cuando haya un error en una instrucción DML. En versiones anteriores de SQL Server, se enviaba un valor incorrecto de -1 al cliente cuando la instrucción DML con error se encontraba en un bloque TRY-CATCH y tenía parámetros automáticos con Motor de base de datos o el bloque TRY-CATCH no estaba en el mismo nivel que la instrucción con el error. Por ejemplo, si un bloque de TRY-CATCH llama a un procedimiento almacenado y se produce un error en una instrucción DML del procedimiento, el cliente recibirá incorrectamente un valor de -1.

Se producirán errores en las aplicaciones que se basen en este comportamiento incorrecto.

SERVERPROPERTY (‘Edition’)

Edición de producto instalada de la instancia de SQL Server 2012. Utilice el valor de esta propiedad para determinar las características y los límites, como por ejemplo el número máximo de CPU admitidas por el producto instalado.

En función de la edición Enterprise instalada, puede devolver "Enterprise Edition" o "Enterprise Edition: licencia basada en núcleo" Las ediciones Enterprise se diferencian en la capacidad de proceso máxima de una sola instancia de SQL Server. Para obtener más información sobre los límites de la capacidad de proceso en SQL Server 2012, vea Límites de la capacidad de cálculo de cada edición de SQL Server.

CREATE LOGIN

La opción CREATE LOGIN WITH PASSWORD = 'password' HASHED no se puede utilizar con los valores hash creados con SQL Server 7 o anterior.

Operaciones CAST y CONVERT para datetimeoffset

Los únicos estilos que se admiten al convertir desde tipos de fecha y hora a datetimeoffset son 0 o 1. Todos los demás estilos de conversión devuelven el error 9809. Por ejemplo, el código siguiente genera un error 9809.

SELECT CONVERT(date, CAST('7070-11-25 16:25:01.00986 -02:07' as datetimeoffset(5)), 107);

SET ROWCOUNT

Se modificó el comportamiento de SET ROWCOUNT para mejorar la eficiencia de varias consultas comunes. Esto puede afectar los planes de consulta para los niveles de compatibilidad 110 y superiores. Puede ocurrir un error cuando la instrucción SET ROWCOUNT cambia el valor de ROWCOUNT a 0 o desde 0, después de una instrucción DECLARE CURSOR y antes de una instrucción FETCH. Para evitar este error, establezca el nivel de compatibilidad de la base de datos en 100 o defina ROWCOUNT fuera de las instrucciones de cursor.

Vistas de administración dinámica

Ver

Descripción

sys.dm_exec_requests

La columna command cambia de nvarchar(16) a nvarchar(32).

sys.dm_os_memory_cache_counters

Se ha cambiado el nombre de las siguientes columnas.

Nombre de columna anterior

Nombre de columna nuevo

single_pages_kb

pages_kb

multi_pages_kb

pages_in_use_kb

sys.dm_os_memory_cache_entries

El nombre de la columna pages_allocated_count se ha cambiado a pages_kb.

sys.dm_os_memory_clerks

Se ha quitado la columna multi_pages_kb.

El nombre de la columna single_pages_kb se ha cambiado a pages_kb.

sys.dm_os_memory_nodes

Se ha cambiado el nombre de las siguientes columnas.

Nombre de columna anterior

Nombre de columna nuevo

single_pages_kb

pages_kb

multi_pages_kb

foreign_committed_kb

sys.dm_os_memory_objects

Se ha cambiado el nombre de las siguientes columnas.

Nombre de columna anterior

Nombre de columna nuevo

pages_allocated_count

pages_in_bytes

max_pages_allocated_count

max_pages_in_bytes

sys.dm_os_sys_info

Se ha cambiado el nombre de las siguientes columnas.

Nombre de columna anterior

Nombre de columna nuevo

physical_memory_in_bytes

physical_memory_kb

bpool_commit_target

committed_target_kb

bpool_visible

visible_target_kb

virtual_memory_in_bytes

virtual_memory_kb

bpool_commited

committed_kb

sys.dm_os_workers

La columna regional se ha quitado.

Ver

Descripción

sys.data_spaces

sys.partition_schemes

sys.filegroups

sys.partition_functions

Se ha agregado la nueva columna is_system a sys.data_spaces y sys.partition_functions. (sys.partition_schemes y sys.filegroups heredan las columnas de sys.data_spaces.)

Un valor de 1 en esta columna indica que el objeto se usa para fragmentos de índice de texto completo.

En sys.partition_functions, sys.partition_schemes y sys.filegroups, la nueva columna no es la última. Revise las consultas existentes que se basan en el orden de las columnas devueltas desde estas vistas de catálogo.

Tipos de datos CLR de SQL (geometry, geography y hierarchyid)

El ensamblado Microsoft.SqlServer.Types.dll, que contiene los tipos de datos espaciales y el tipo hierarchyid, se ha actualizado de la versión 10.0 a la versión 11.0. Cuando se cumplan las siguientes condiciones, se puede producir un error en las aplicaciones personalizadas que hacen referencia a este ensamblado.

  • Cuando se mueve una aplicación personalizada de un equipo en el que se instaló SQL Server 2008 R2 a un equipo en el que solo se instaló SQL Server 2012, se producirá un error en la aplicación porque no está la versión 10.0 del SqlTypes a la que se hace referencia. Puede aparecer este mensaje de error: “Could not load file or assembly 'Microsoft.SqlServer.Types, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The system cannot find the file specified.”

  • Cuando se hace referencia a la versión 11.0 del ensamblado SqlTypes y la versión 10.0 también está instalada, puede aparecer este mensaje de error: “System.InvalidCastException: Unable to cast object of type 'Microsoft.SqlServer.Types.SqlGeometry' to type 'Microsoft.SqlServer.Types.SqlGeometry'.”

  • Cuando se hace referencia a la versión 11.0 del ensamble SqlTypes desde una aplicación personalizada que se dirige a .NET 3.5, 4 o 4.5, se producirá un error en ella porque SqlClient, por diseño, carga la versión 10.0 del ensamble. Este error se produce cuando la aplicación llama a uno de los siguientes métodos:

    • método GetValue de la clase SqlDataReader

    • método GetValues de la clase SqlDataReader

    • operador de índice de corchete [] de la clase SqlDataReader

    • método ExecuteScalar de la clase SqlCommand

Puede solucionar este problema si usa uno de los métodos siguientes:

  • Puede solucionar este problema en el código si llama al método GetSqlBytes, en lugar de los métodos Get enumerados anteriormente, para recuperar los tipos de sistema SQL Server de CLR, tal como se muestra en el siguiente ejemplo:

    string query = "SELECT [SpatialColumn] FROM [SpatialTable]";
          using (SqlConnection conn = new SqlConnection("..."))
          {
                SqlCommand cmd = new SqlCommand(query, conn);
    
                conn.Open();
                SqlDataReader reader = cmd.ExecuteReader();
    
                while (reader.Read())
                {
                      // In version 11.0 only
                      SqlGeometry g = 
    SqlGeometry.Deserialize(reader.GetSqlBytes(0));
    
                      // In version 10.0 or 11.0
                      SqlGeometry g2 = new SqlGeometry();
                      g.Read(new BinaryReader(reader.GetSqlBytes(0).Stream));
                }
          }
    
  • Puede solucionar este problema mediante el redireccionamiento de ensamblado en el archivo de configuración de la aplicación, tal como se muestra en el siguiente ejemplo:

    <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        ...
        <dependentAssembly>
            <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
            <bindingRedirect oldVersion="10.0.0.0" newVersion="11.0.0.0" />
        </dependentAssembly>
        ...
    </assemblyBinding>
    <runtime>
    
  • Puede solucionar esta problema en la cadena de conexión si especifica el valor "SQL Server 2012" para el atributo "Type System Version" para forzar que SqlClient cargue la versión 11.0 del ensamblado. Este atributo de cadena de conexión solo está disponible en .NET 4.5 y posterior.

  • La etiqueta assemblyBinding debe ajustarse debajo de la etiqueta runtime.

Compatibilidad con AWE

Ya no se incluye la compatibilidad con las extensiones de ventana de dirección (AWE) de 32 bits. Esto puede dar lugar a un rendimiento más lento en sistemas operativos de 32 bits. En el caso de instalaciones que usen grandes cantidades de memoria, migre a un sistema operativo de 64 bits.

Las funciones XQuery detectan los caracteres suplentes

La recomendación de W3C para las funciones y los operadores de XQuery requiere contar un par suplente que represente un carácter Unicode de nivel alto como un solo glifo en codificación UTF-16. No obstante, en versiones de SQL Server anteriores a SQL Server 2012, las funciones de cadena no reconocían los pares suplentes como un solo carácter. Algunas operaciones de cadena, como los cálculos de longitud de cadena y las extracciones de subcadenas, devolvían resultados incorrectos. SQL Server 2012 ahora es completamente compatible con UTF-16 y permite la administración correcta de los pares suplentes.

El tipo de datos XML de SQL Server solo permite los pares suplentes con formato correcto. No obstante, es posible que algunas funciones sigan devolviendo resultados indefinidos o inesperados en determinadas circunstancias, ya que es posible pasar pares suplentes no válidos o parciales a las funciones XQuery como valores de cadena. Tenga en cuenta los siguientes métodos para generar valores de cadena al usar XQuery en SQL Server:

  • Proporcionar un valor de cadena constante como valor binario. Al usar este método, sigue siendo posible pasar pares suplentes no válidos o parciales.

  • Proporcionar un valor de cadena constante al proporcionar entidades de caracteres. Al usar este método, no es posible pasar pares suplentes no válidos. Las funciones XQuery requieren una sola entidad de caracteres para el carácter de alto nivel. Estas funciones producen un error si se proporcionan las entidades de caracteres para los caracteres de pares suplentes.

  • Importar valores externos al usar sql:column o sql:variable. Al usar estos métodos, sigue siendo posible incorporar pares suplentes no válidos o parciales.

Funciones y operadores de XQuery afectados

Las funciones y los operadores de XQuery siguientes ahora administran los pares suplentes UTF-16 correctamente en SQL Server 2012:

  • fn:string-length. No obstante, si se pasa un par suplente no válido o parcial como argumento, el comportamiento de string-length es indefinido.

  • fn:substring.

  • fn:contains. No obstante, si se pasa un par suplente parcial como un valor, contains puede devolver resultados inesperados, ya que puede encontrar el par suplente parcial incluido en el par suplente con formato correcto.

  • fn:concat. No obstante, si se pasa un par suplente parcial como valor, concat puede producir pares suplentes incorrectos o parciales.

  • Operadores de comparación y la cláusula order by. Los operadores de comparación son +, <, >, <=, >=, eq, lt, gt, le y ge.

Llamadas de consulta distribuida a un procedimiento de sistema

Las llamadas de consulta distribuida a través de OPENQUERY a algunos procedimientos del sistema generarán un error cuando se llama desde un servidor de a otro. Esto sucede cuando Motor de base de datos no puede detectar metadatos para un procedimiento. Por ejemplo, SELECT * FROM OPENQUERY(..., 'EXEC xp_loginfo').

Compatibilidad con versiones anteriores

El nuevo comportamiento depende del nivel de compatibilidad

Las funciones y los operadores siguientes demuestran el nuevo comportamiento descrito anteriormente solo cuando el nivel de compatibilidad es 110 o superior:

  • fn:contains.

  • fn:concat.

  • operadores de comparación y cláusula order by

El nuevo comportamiento depende del URI de espacio de nombres predeterminado para las funciones

Las siguientes funciones demuestran el nuevo comportamiento descrito anteriormente solo cuando el URI de espacio de nombres corresponde al espacio de nombres en la recomendación final, es decir http://www.w3.org/2005/xpath-functions. Cuando el nivel de compatibilidad es 110 o superior, de forma predeterminada, SQL Server 2012 enlaza el espacio de nombres de función predeterminado a este espacio de nombres. No obstante, estas funciones demuestran el nuevo comportamiento cuando se usa este espacio de nombres independientemente del nivel de compatibilidad.

  • fn:string-length

  • fn:substring

Icono de flecha usado con el vínculo Volver al principioVolver al principio

Principales cambios de SQL Server 2008/SQL Server 2008R2

Esta sección contiene los principales cambios presentados en SQL Server 2008. En SQL Server 2008 R2 no se ha introducido ningún cambio.

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.

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 en una base de datos de SQL Server y en la GAC, las dos copias del ensamblado deben coincidir exactamente. Si no coinciden, se producirá un error cuando la integración CLR de SQL Server utilice 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 con valores de tabla de CLR 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 con valores de tabla de CLR 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

Ver

Descripción

sys.dm_os_sys_info

Se han quitado las columnas cpu_ticks_in_ms y sqlserver_start_time_cpu_ticks.

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 de ejecución de consultas. 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 .

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 a los ensamblados. Este permiso no tiene ningún efecto y ahora produce un error. En su lugar, conceda, deniegue o revoque el permiso EXECUTE para los procedimientos almacenados o para las funciones que hacen referencia al método de ensamblado.

Permisos GRANT/DENY/REVOKE para los tipos del sistema

No se pueden conceder, denegar ni revocar permisos a 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.

GROUP BY

La cláusula GROUP BY no puede contener ninguna subconsulta en una expresión usada para la lista de agrupación. En las versiones anteriores de SQL Server, se permitía. En SQL Server 2008, se devuelve el error 144.

Por ejemplo, el código siguiente se ejecutará correctamente en SQL Server 2005 y producirá un error en SQL Server 2008.

DECLARE @Test TABLE(a int NOT NULL);
INSERT INTO @Test SELECT 1 union ALL SELECT 2;
SELECT COUNT(*) 
FROM @Test
GROUP BY CASE WHEN a IN (SELECT t.a FROM @Test AS t)
THEN 1 ELSE 0 
END;

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 de nivel de servidor precompute rank

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

READPAST, sugerencia de tabla

No puede especificar la sugerencia de READPAST con aislamiento de instantáneas.

La sugerencia de READPAST se omite cuando se activa la opción de base de datos READ_COMMITED_SNAPSHOT o ALLOW_SNAPSHOT_ISOLATION. Sin embargo, si combina la sugerencia de READPAST con READCOMMITTEDLOCK, el comportamiento de READPAST será igual que con la sugerencia de READCOMMITTED de bloqueo.

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 anterior

Nombre de columna nuevo

GroupName

RoleName

Group_name

Role_name

Group_id

Role_id

Users_in_group

Users_in_role

Cifrado de datos transparente

El cifrado de datos transparente (TDE) se realiza al nivel de E/S: la estructura de la página está sin cifrar en la memoria y solo se cifra 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.

Expresiones de XQuery y XPath

En SQL Server 2005, se permiten aquellos pasos de una expresión de XQuery o XPath que comienza por 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).

Connecting

Característica

Descripción

Conectarse desde SQL Server Native Client mediante SSL

Al conectarse con SQL Server Native Client, las aplicaciones que usan "SERVER=shortname; FORCE ENCRYPTION=true" con un certificado cuyos asuntos especifiquen nombres de dominio completos (FQDN) se han conectado antes debido a una validación poco minuciosa. SQL Server 2008 R2 mejora la seguridad aplicando asuntos de FQDN a los certificados. Las aplicaciones que se basan en una validación poco minuciosa deben tomar una de las siguientes acciones:

  • Usar el FQDN en la cadena de conexión.

    • Esta opción no requiere volver a compilar la aplicación si la palabra clave SERVER de la cadena de conexión se configura fuera de esta.

    • Esta opción no funciona para las aplicaciones que tienen codificadas sus cadenas de conexión.

    • Esta opción no funciona en las aplicaciones que utilizan la creación de reflejo de base de datos, porque el servidor reflejado responde con un nombre sencillo.

  • Agregue un alias para asignar shortname al FQDN.

    • Esta opción funciona incluso con las aplicaciones que tienen codificadas sus cadenas de conexión.

    • Esta opción no funciona con las aplicaciones que utilizan la creación de reflejo de base de datos, porque los proveedores no buscan los alias de los nombres de asociados de conmutación por error recibidos.

  • Haga que se emita un certificado para shortname.

    • Esta opción funciona para todas las aplicaciones.

Icono de flecha usado con el vínculo Volver al principioVolver al principio

Últimos cambios en SQL Server 2005

Para obtener una lista de los principales cambios presentados en SQL Server 2005, vea Principales cambios en las características del Motor de base de datos de SQL Server 2005.

Vea también

Referencia

Características desusadas del motor de base de datos de SQL Server 2012

Cambios de comportamiento en las características del Motor de base de datos en SQL Server 2012

Funcionalidad del motor de base de datos no incluida en SQL Server 2012

Nivel de compatibilidad de ALTER DATABASE (Transact-SQL)

Otros recursos

Compatibilidad con versiones anteriores del Motor de base de datos de SQL Server