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

En este tema se describen los cambios importantes en el motor de base de datos de SQL Server 2014 y versiones anteriores de SQL Server. Estos cambios pueden provocar errores en las aplicaciones, en los scripts o en las funcionalidades basados en versiones anteriores de SQL Server. Podría encontrar estos problemas al actualizar. Para obtener más información, vea Use Upgrade Advisor to Prepare for Upgrades.

Principales cambios en SQL Server 2014

No hay ningún problema nuevo.

Principales cambios en 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 denomina NEXT y la tabla o columna tiene el alias VALUE y, si se omite EL ESTÁNDAR ANSI, 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.
Operador PIVOT 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 admitir 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.
Palabra clave reservada WITHIN WITHIN ahora es una palabra clave reservada. Se producirán errores en las referencias a objetos o columnas que se denominen "within". Cambie el nombre del objeto o de la columna, o bien delimite el nombre con corchetes o comillas. Por ejemplo, SELECT * FROM [within].
Operaciones CAST y CONVERT en columnas calculadas de tipo time o datetime2 En versiones anteriores de SQL Server, el estilo predeterminado para las operaciones CAST y CONVERT en time los tipos de datos y datetime2 es 121, excepto cuando se usa cualquiera de los tipos 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). Ahora, al especificar un nombre de tabla con los siguientes formatos, se produce un error en tiempo de compilación con el error 117:

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 regenerar 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, el motor de base de datos enviará de forma coherente el token DONE de TDS con RowCount: 0 a los clientes cuando se produzca un error en una instrucción DML. En versiones anteriores de SQL Server, se envía un valor incorrecto de -1 al cliente cuando la instrucción DML que produce un error se encuentra en un bloque TRY-CATCH y el motor de base de datos o el bloque TRY-CATCH no está en el mismo nivel que la instrucción failed. 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 ('Edición') Se instaló la edición del producto 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, esto puede devolver "Enterprise Edition" o "Enterprise Edition: Licencias basadas en núcleo". Las ediciones Enterprise se diferencian en función de la capacidad de proceso máxima por una única instancia de SQL Server. Para obtener más información sobre los límites de capacidad de proceso en SQL Server 2012, consulte Límites de capacidad de proceso por edición de SQL Server.
CREATE LOGIN La CREATE LOGIN WITH PASSWORD = ' opción de contraseña' HASHED no se puede usar con hashes creados por SQL Server 7 o versiones anteriores.
Operaciones CAST y CONVERT para datetimeoffset Los únicos estilos que se admiten al convertir de 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);

Vistas de administración dinámica

Ver Descripción
sys.dm_exec_requests La columna de comandos cambia de nvarchar(16) a nvarchar(32).
sys.dm_os_memory_cache_counters Se ha cambiado el nombre de las columnas siguientes:

single_pages_kb es ahora:
pages_kb

multi_pages_kb
es ahora: pages_in_use_kb
sys.dm_os_memory_cache_entries Se ha cambiado el nombre de la columna pages_allocated_count columna pages_kb.
sys.dm_os_memory_clerks Se ha quitado el multi_pages_kb de columna.

Se ha cambiado el nombre de la columna single_pages_kb columna pages_kb.
sys.dm_os_memory_nodes Se ha cambiado el nombre de las columnas siguientes:

single_pages_kb ahora es:
pages_kb

multi_pages_kb es ahora:
foreign_committed_kb
sys.dm_os_memory_objects Se ha cambiado el nombre de las siguientes columnas.

pages_allocated_count es ahora:
pages_in_bytes

max_pages_allocated_count es ahora: max_pages_in_bytes
sys.dm_os_sys_info Se ha cambiado el nombre de las columnas siguientes:

physical_memory_in_bytes es ahora:
physical_memory_kb

bpool_commit_target es ahora:
committed_target_kb

bpool_visible ahora es:
visible_target_kb

virtual_memory_in_bytes ahora es:
virtual_memory_kb

bpool_commited ahora es:
committed_kb
sys.dm_os_workers La columna regional se ha quitado.

Vistas de catálogo

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.

  • Al mover una aplicación personalizada desde un equipo en el que SQL Server 2008 R2 se instaló en un equipo en el que solo se instala SQL Server 2014, se producirá un error en la aplicación porque la versión a la que se hace referencia 10.0 del ensamblado SqlTypes no está presente. 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."

  • Al hacer referencia a la versión 11.0 del ensamblado SqlTypes y también se instala la versión 10.0, es posible que vea este mensaje de error: "System.InvalidCastException: Unable to cast object of type 'Microsoft.SqlServer.Types.SqlGeometry' to type 'Microsoft.SqlServer.Types.SqlGeometry'."

  • Al hacer referencia a la versión 11.0 del ensamblado SqlTypes desde una aplicación personalizada destinada a .NET 3.5, 4 o 4.5, se producirá un error en la aplicación porque SqlClient por diseño carga la versión 10.0 del ensamblado. 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 mediante una llamada al GetSqlBytes método , en lugar de los métodos Get enumerados anteriormente, para recuperar los tipos de sistema de CLR SQL Server, como se muestra en el ejemplo siguiente:

    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. Sin embargo, en versiones de SQL Server anteriores a SQL Server 2012, las funciones de cadena no reconoceban los pares suplentes como un solo carácter. Algunas operaciones de cadena, como los cálculos de longitud de cadena y las extracciones de subcadena, devolvieron resultados incorrectos. SQL Server 2012 ahora es totalmente compatible con UTF-16 y el control correcto de los pares suplentes.

El tipo de datos XML de SQL Server solo permite pares suplentes bien formados. 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 métodos siguientes 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.

  • Importe valores externos mediante 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 siguientes funciones y operadores XQuery ahora controlan correctamente los pares suplentes UTF-16 en SQL Server 2012:

  • fn:string-length. Sin embargo, si se pasa un par suplente no válido o parcial como argumento, el comportamiento de longitud de cadena no está definido.

  • fn:substring.

  • fn:contains. Sin embargo, si se pasa un par suplente parcial como valor, contiene puede devolver resultados inesperados, ya que puede encontrar el par suplente parcial contenido en el par suplente bien formado.

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

  • Operadores de comparación y la cláusula order by . Los operadores de comparación incluyen +, <, , ><=, >=, eq, ltgt, , ley ge.

Llamadas de consulta distribuida a un procedimiento de sistema

Se producirá un error en las llamadas de consulta distribuidas a través OPENQUERY de algunos procedimientos del sistema cuando se llama desde un servidor SQL Server 2012 a otro. Esto ocurre cuando el motor de base de datos no puede detectar metadatos para un procedimiento. Por ejemplo, SELECT * FROM OPENQUERY(..., 'EXEC xp_loginfo').

Nivel de aislamiento y sp_reset_connection

El nivel de aislamiento para las conexiones se gestiona por controladores de clientes de la siguiente manera:

  • Todos los controladores nativos (SNAC, MDAC y ODBC) establecen el nivel de aislamiento (según la configuración de la aplicación) basándose en sp_reset_connection.

  • Para ADO.NET, básicamente obtendrá un nivel de aislamiento aleatorio que dependerá de la conexión que se obtiene del grupo (y si la aplicación usa un nivel de aislamiento diferente). Puesto que el grupo ADO.NET puede reciclar conexiones de manera interna y transparente, usted no puede predecir qué lanzará el grupo.

  • Para el controlador JDBC, obtiene el mismo comportamiento que ADO.NET

    La aplicación siempre debe establecer de forma explícita el nivel de aislamiento después de abrir la conexión para obtener lo que quiere.

    Se puede agrupar la conexión JDBC, por lo que la aplicación puede obtener un nivel de aislamiento aleatorio y no saberlo.

Para conservar la compatibilidad con versiones anteriores, este nuevo comportamiento solo se aplica a clientes recientes a partir de TDS 7.4.

Backward Compatibility

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 funciones siguientes muestran el nuevo comportamiento descrito anteriormente solo cuando el URI de espacio de nombres predeterminado 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

Principales cambios de SQL Server 2008/SQL Server 2008R2

Esta sección contiene los cambios importantes introducidos en SQL Server 2008. No se introdujeron cambios en SQL Server 2008 R2.

Intercalaciones

Característica Descripción
Nuevas intercalaciones SQL Server 2008 presenta nuevas intercalaciones que están en alineación completa con las intercalaciones proporcionadas por 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, el Microsoft.SqlServer.Types ensamblado para admitir nuevos tipos de datos se instala automáticamente. 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 actualiza las bibliotecas de la caché global de ensamblados (GAC). Si tiene bibliotecas no admitidas registradas en una base de datos de SQL Server, la aplicación de SQL Server puede dejar de funcionar después de actualizar a SQL Server 2008. Esto se debe a que el mantenimiento o la actualización de bibliotecas en la GAC no actualiza los ensamblados dentro de SQL Server. Si existe un ensamblado 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 SQL Server integración clR use el ensamblado. Para obtener más información, vea Bibliotecas de .NET Framework admitidas.

Después de actualizar la base de datos, el servicio o la copia del ensamblado dentro de las bases de datos de SQL Server con la instrucción ALTER ASSEMBLY. Para obtener más información, consulte 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 suplantación dentro de funciones definidas por el usuario clR, agregados definidos por el usuario o tipos definidos por el usuario (UDT) puede hacer que la aplicación genere el error 6522 después de actualizar a SQL Server 2008. Los siguientes escenarios se realizan correctamente en SQL Server 2005, pero se produce un error en SQL Server 2008. Se proporcionan soluciones para cada escenario.

Una función definida por el usuario clR, un agregado definido por el usuario o un método UDT que usa suplantación tiene un parámetro de tipo nvarchar(max), , varchar(max)varbinary(max)ntext, text, , imageo un UDT grande y no tiene el atributo DataAccessKind.Read en el método . Para resolver este problema, agregue el atributo DataAccessKind.Read en el método , vuelva a compilar el ensamblado y vuelva a implementar la rutina y el ensamblado.

Función con valores de tabla CLR que tiene un método Init que realiza la suplantación. Para resolver este problema, agregue el atributo DataAccessKind.Read en el método , vuelva a compilar el ensamblado y vuelva a implementar la rutina y el ensamblado.

Función con valores de tabla 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 acceda a recursos externos mediante el método FillRow . En su lugar, acceda a recursos externos desde el método Init .

Vistas de administración dinámica

Ver 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_semaphoressys.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 conectarse a un servidor configurado para usar solo la autenticación de Windows. En SQL Server 2008, se devuelve el error 18456 en su lugar.

Showplan

Característica Descripción
Esquema XML del plan de presentación Se agrega un nuevo elemento SeekPredicateNew al esquema XML showplan y la secuencia xsd envolvente (SqlPredicatesType) se convierte en un <elemento xsd:choice> . En lugar de uno o varios elementos SeekPredicate , uno o varios elementos SeekPredicateNew ahora pueden aparecer 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 para la compatibilidad con versiones anteriores; sin embargo, los planes de consulta creados en SQL Server 2008 pueden contener el elemento SeekPredicateNew. Las aplicaciones que esperan recuperar solo el elemento secundario SeekPredicate del nodo ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/RelOp/IndexScan/SeekPredicates pueden producir un error si el elemento SeekPredicate no existe. Vuelva a escribir la aplicación para esperar el elemento SeekPredicate o SeekPredicateNew en este nodo. Para obtener más información, consulte el elemento .
Esquema XML del plan de presentación Se agrega un nuevo atributo IndexKind al tipo complejo ObjectType en el esquema XML del plan de presentación. Se producirá un error en las aplicaciones que validen estrictamente los planes de SQL Server en el esquema de SQL Server 2005.

Transact-SQL

Característica Descripción
Evento ALTER_AUTHORIZATION_DATABASE DDL En SQL Server 2005, cuando se activa el evento DDL ALTER_AUTHORIZATION_DATABASE, el valor 'object' se devuelve en el elemento ObjectType del xml EVENTDATA para este evento cuando el tipo de entidad de la operación protegible en el 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 versiones anteriores de SQL Server, el estilo no válido se establece en el estilo predeterminado para las conversiones binarias a caracteres y caracteres a binarios.
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 realizan correctamente, pero no tienen 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 versiones anteriores de SQL Server, esto 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, consulte 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.
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 siguientes nombres de columna que se devuelven en el conjunto de resultados del procedimiento almacenado sp_helpuser han cambiado:

GroupName es ahora:
RoleName

Group_name es ahora:
Role_name

Group_id es ahora:
Role_id

Users_in_group ahora es:
Users_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. Las aplicaciones de terceros que omiten el mecanismo de SQL Server normal para acceder a páginas (por ejemplo, mediante el examen de los archivos de datos o de registro directamente), producirán un error cuando una base de datos use TDE porque los datos están cifrados en los archivos. Estas aplicaciones pueden aprovechar Window Cryptographic API para desarrollar una solución para descifrar los datos fuera de SQL Server.

XQuery

Característica Descripción
Compatibilidad con la fecha y la hora En SQL Server 2005, los tipos xs:timede datos , xs:datey xs:dateTime no tienen compatibilidad con la zona horaria. Los datos de la zona horaria se asignan a la zona horaria UTC. SQL Server 2008, proporciona un comportamiento conforme estándar, lo que da lugar a los siguientes cambios:

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.



Nota: Modifique las aplicaciones y las expresiones XQuery para tener en cuenta los nuevos valores de tipo.
Expresiones de XQuery y XPath En SQL Server 2005, se permiten los pasos de una expresión XQuery o XPath que comiencen 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, no se permite este uso porque no cumple con los estándares 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
Conexión desde SQL Server Native Client mediante SSL Al conectarse con SQL Server Native Client, las aplicaciones que usan "SERVER=shortname; FORCE ENCRYPTION=true" con el certificado cuyos sujetos especifican nombres de dominio completos (FQDN) se han conectado en el pasado debido a la validación relajada. 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 está configurada fuera de la aplicación.

-Esta opción no funciona para las aplicaciones que tienen sus cadenas de conexión codificadas de forma rígida.

-Esta opción no funciona para las aplicaciones que usan la creación de reflejo de la base de datos, ya que el servidor reflejado responde con un nombre simple.
Agregue un alias para asignar shortname al FQDN.

-Esta opción funciona incluso para las aplicaciones que tienen sus cadenas de conexión codificadas de forma rígida.

-Esta opción no funciona para las aplicaciones que usan la creación de reflejo de la base de datos, ya que los proveedores no buscan alias para 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.

Principales cambios en SQL Server 2005

Acumulamos y conservamos documentación para versiones muy antiguas de Microsoft SQL Server en un conjunto de páginas web de archivo. Los motores de búsqueda, como Bing.com y Google.com, no procesan las páginas web archivadas. Pero puede ver estos archivos en nuestra dirección o versiones anteriores de Docs:

Estos archivos incluyen la documentación de, al menos, las siguientes versiones anteriores:

  • SQL Server 2014
  • SQL Server 2012
  • SQL Server 2008 R2
  • SQL Server 2008
  • SQL Server 2005

SQL Server documentación de 2014 se ha archivado y los motores de búsqueda ya no los procesan. Los artículos de 2014 ahora se declaran con NOINDEX y NOFOLLOW.

La versión más reciente de SQL Server, junto con otras versiones recientes, se documenta aquí.

Consulte también

Características desusadas del motor de base de datos de SQL Server 2014
Cambios de comportamiento en las características del Motor de base de datos en SQL Server 2014
Funcionalidad del motor de base de datos no incluida en SQL Server 2014
Compatibilidad con versiones anteriores del Motor de base de datos de SQL Server
Nivel de compatibilidad de ALTER DATABASE (Transact-SQL)
Últimos cambios en las características de las herramientas de administración de SQL Server 2014