Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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, consulte Usar el Asesor de actualizaciones para preparar las actualizaciones.
Cambios importantes en SQL Server 2014
No hay nuevos problemas.
Cambios importantes en SQL Server 2012
Transact-SQL
Característica | Descripción |
---|---|
Selección de columnas o tablas denominada NEXT | Las secuencias usan la función NEXT VALUE FOR estándar ANSI. Si una tabla o una columna se denomina NEXT y la tabla o columna se alias como VALUE, y si se omite el estándar ANSI AS, la instrucción resultante puede producir un error. Para evitar el problema, incluya la palabra clave AS estándar ANSI. Por ejemplo, SELECT NEXT VALUE FROM Table debe volver a escribirse como SELECT NEXT AS VALUE FROM Table y SELECT Col1 FROM NEXT VALUE se debe volver a escribir como SELECT Col1 FROM NEXT AS VALUE . |
Operador PIVOT | No se permite el operador PIVOT en una consulta de expresión de tabla común (CTE) recursiva cuando el nivel de compatibilidad de la base de datos está establecido en 110. Vuelva a escribir la consulta o cambie el nivel de compatibilidad a 100 o inferior. El uso de PIVOT en una consulta CTE recursiva genera resultados incorrectos cuando hay más de una sola fila por agrupación. |
sp_setapprole y sp_unsetapprole | El parámetro de cookie OUTPUT para sp_setapprole se documenta 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 devolución de cookies aumenta en una versión futura. Para obtener más información, vea sp_setapprole (Transact-SQL). |
EXECUTE AS | El parámetro OUTPUT de cookie para EXECUTE AS se documenta 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 devolución de cookies aumenta en una versión futura. Para obtener más información, vea EXECUTE AS (Transact-SQL). |
función sys.fn_get_audit_file | 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 esperadas. Seleccione columnas por nombre o ajuste la aplicación para aceptar estas columnas adicionales. |
Palabra clave reservada WITHIN | WITHIN ahora es una palabra clave reservada. Las referencias a objetos o columnas denominadas "within" fallarán. Cambie el nombre del objeto o columna o delimite el nombre mediante 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 los tipos de datos time y datetime2 es 121, excepto cuando se usa cualquiera de estos 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.En el nivel de compatibilidad 110, el estilo predeterminado para las operaciones CAST y CONVERT en los tipos de datos time y datetime2 siempre es 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.La actualización de la base de datos al nivel de compatibilidad 110 no cambiará los datos de usuario almacenados en el disco. Debe corregir manualmente estos datos según convenga. Por ejemplo, si usó SELECT INTO para crear una tabla a partir de un origen que contenía una expresión de columna calculada descrita anteriormente, los datos (mediante el estilo 0) se almacenarían en lugar de la propia definición de columna calculada. Debería actualizar manualmente estos datos para que coincidieran con el estilo 121. |
MODIFICAR TABLA | La instrucción ALTER TABLE solo permite nombres de tabla de dos partes (schema.object). Ahora se produce un error al especificar un nombre de tabla con los siguientes formatos en tiempo de compilación con el error 117: server.database.schema.table .base_datos.esquema.tabla .. schema.table En versiones anteriores, al especificar el formato server.database.schema.table, se devolvió el error 4902. Especificar el formato .database.schema.table o el formato ..schema.table tuvo éxito. Para resolver el problema, quite el uso de un prefijo de 4 partes. |
Exploración de metadatos | La consulta de una vista mediante FOR BROWSE o SET NO_BROWSETABLE ON ahora devuelve los metadatos de la vista, no los metadatos del objeto subyacente. Este comportamiento ahora coincide con otros métodos de exploración de metadatos. |
Soundex | En el nivel de compatibilidad de la base de datos 110, la función SOUNDEX implementa nuevas reglas que pueden provocar que los valores calculados por la función sean diferentes de los valores calculados en niveles de compatibilidad anteriores. Después de actualizar al nivel de compatibilidad 110, es posible que tenga que reconstruir los índices, montones o restricciones CHECK que utilizan la función SOUNDEX. Para obtener más información, vea SOUNDEX (Transact-SQL) |
Mensaje de recuento de filas para instrucciones DML fallidas | 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 falla está contenida en un bloque TRY-CATCH y es autoparamentrizada por el motor de base de datos o el bloque TRY-CATCH no está al mismo nivel que la instrucción que falló. Por ejemplo, si un bloque de TRY-CATCH llama a un procedimiento almacenado y se produce un error en una instrucción DML en el procedimiento, el cliente recibirá incorrectamente un valor de -1. Se producirá un error en las aplicaciones que se basan en este comportamiento incorrecto. |
SERVERPROPERTY ('Edition') | Edición de producto instalada de la instancia de SQL Server 2012. Use el valor de esta propiedad para determinar las características y los límites, como el número máximo de CPU compatibles con el producto instalado. En función de la edición Enterprise instalada, esto puede devolver "Edición Enterprise" o "Edición Enterprise: Licencias basadas en núcleos". Las ediciones Enterprise se diferencian en función de la capacidad de proceso máxima por una sola instancia de SQL Server. Para obtener más información sobre los límites de capacidad de proceso en SQL Server 2012, vea 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 hash 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 devuelve el 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
Vista | 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: El valor de single_pages_kb ahora es: pages_kb multi_páginas_kb es ahora: pages_in_use_kb |
sys.dm_os_memory_cache_entries | Se ha cambiado el nombre de la columna pages_allocated_count a pages_kb. |
sys.dm_os_memory_clerks | Se ha quitado la columna multi_pages_kb. Se ha cambiado el nombre de la columna single_pages_kb a pages_kb. |
sys.dm_os_memory_nodes | Se ha cambiado el nombre de las columnas siguientes: single_pages_kb es ahora: pages_kb Ahora, multi_pages_kb es: kilobytes_exterior_comprometidos |
sys.dm_os_memory_objects | Se ha cambiado el nombre de las columnas siguientes. 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 está ahora en: memoria_física_kb bpool_commit_target es ahora: objetivo_comprometido_kb bpool_visible es ahora: objetivo_visible_kb virtual_memory_in_bytes ahora es: virtual_memory_kb bpool_commited ahora es: kilobytes_comprometidos |
sys.dm_os_workers | Se ha quitado la columna de localización. |
Vistas de catálogo
Vista | Descripción |
---|---|
espacios_de_datos_del_sistema esquemas_de_partición_sys sys.filegroups (grupos de archivos del sistema) sys.partition_functions |
Se ha agregado la columna nueva is_system a las estructuras 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 columna. Revise las consultas existentes que dependen del 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. Las aplicaciones personalizadas que hacen referencia a este ensamblado pueden producir un error cuando se cumplen las condiciones siguientes.
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 está instalado 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. Es posible que vea 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 al ensamblado SqlTypes versión 11.0 y la versión 10.0 también está instalada, 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 métodos siguientes:
GetValue
método de laSqlDataReader
claseGetValues
método de laSqlDataReader
claseoperador de índice de corchetes [] de la
SqlDataReader
claseExecuteScalar
método de laSqlCommand
clase
Puede solucionar este problema mediante uno de los métodos siguientes:
Puede solucionar este problema en el código llamando al
GetSqlBytes
método , en lugar de los métodos Get enumerados anteriormente, para recuperar los tipos del sistema 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 ensamblados en el archivo de configuración de la aplicación, como se muestra en el ejemplo siguiente:
<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 este problema en la cadena de conexión especificando un valor de "SQL Server 2012" para el atributo "Type System Version" para forzar a SqlClient a cargar la versión 11.0 del ensamblado. Este atributo de cadena de conexión solo está disponible en .NET 4.5 y versiones posteriores.
La
assemblyBinding
etiqueta debe encapsularse bajo laruntime
etiqueta .
Compatibilidad con AWE
Se interrumpe la compatibilidad con extensiones de ventanas de direcciones (AWE) de 32 bits. Esto podría dar lugar a un rendimiento más lento en sistemas operativos de 32 bits. Para las instalaciones que usan grandes cantidades de memoria, migre a un sistema operativo de 64 bits.
Las funciones XQuery son Surrogate-Aware
La recomendación W3C para las funciones y operadores XQuery requiere que cuente un par suplente que represente un carácter Unicode de alto rango 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 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 en SQL Server solo permite pares suplentes bien formados. Sin embargo, algunas funciones todavía pueden devolver resultados indefinidos o inesperados en determinadas circunstancias, ya que es posible pasar pares suplentes no válidos o parciales a funciones XQuery como valores de cadena. Tenga en cuenta los métodos siguientes para generar valores de cadena al usar XQuery en SQL Server:
Proporcione un valor de cadena constante como un valor binario. Al usar este método, sigue siendo posible pasar pares suplentes no válidos o parciales.
Proporcione un valor de cadena constante proporcionando entidades de caracteres. Al usar este método, no es posible transferir pares sustitutos no válidos. Las funciones XQuery requieren una entidad de un solo carácter para el carácter de nivel alto. Estas funciones generan un error si se proporcionan las entidades de caracteres del par sustituto.
Importe valores externos mediante sql:column o sql:variable. Al usar estos métodos, sigue siendo posible introducir pares suplentes no válidos o parciales.
Funciones y operadores XQuery afectados
Las siguientes funciones y operadores XQuery ahora controlan los pares suplentes UTF-16 correctamente 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 la longitud de cadena no está definido.
fn:subcadena.
fn:contains. Sin embargo, si se pasa un par sustituto parcial como valor, contiene puede devolver resultados inesperados, ya que puede encontrar el par sustituto parcial incluido en un par sustituto bien formado.
fn:concat. Sin embargo, si se pasa un par suplente parcial como un valor, concat puede producir pares suplentes incorrectos o pares suplentes parciales.
Operadores de comparación y la cláusula order by . Entre los operadores de comparación se incluyen +, <, , , ><= >,
eq
,lt
gt
,le
yge
.
Llamadas de consulta distribuida a un procedimiento del sistema
Las llamadas de consulta distribuida a través de OPENQUERY
en algunos procedimientos del sistema fallarán cuando se realicen de 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 de las conexiones se controla de la siguiente manera por los controladores de cliente:
Todos los controladores nativos (SNAC, MDAC, ODBC) establecen el nivel de aislamiento (basado en la configuración de la aplicación) en sp_reset_connection.
Para ADO.NET, esencialmente obtendrá un nivel de aislamiento aleatorio dependiendo de la conexión que reciba del grupo y de si la aplicación usa diferentes niveles de aislamiento. Dado que el grupo ADO.NET puede reciclar conexiones de manera interna y transparente, no se puede predecir lo que saldrá del grupo.
Para el controlador JDBC, obtiene el mismo comportamiento que ADO.NET
La aplicación siempre debe establecer explícitamente el nivel de aislamiento después de abrir la conexión para obtener lo que quiere.
La conexión JDBC se puede agrupar, 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 los clientes recientes a partir de TDS 7.4.
Retrocompatibilidad
El nuevo comportamiento depende del nivel de compatibilidad
Las siguientes funciones y operadores muestran 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 ordenar por
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, SQL Server 2012 enlaza de forma predeterminada el espacio de nombres de función predeterminado a este espacio de nombres. Sin embargo, estas funciones muestran el nuevo comportamiento cuando se usa este espacio de nombres independientemente del nivel de compatibilidad.
fn:string-length
fn:substring
Cambios importantes en 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 plena alineación con las intercalaciones proporcionadas por Windows Server 2008. Estas 80 nuevas intercalaciones han mejorado la precisión lingüística y se indican mediante las referencias de versión *_100. Si elige una nueva intercalación para el servidor o la base de datos, tenga en cuenta que es posible que los clientes con controladores de cliente anteriores no reconozcan la intercalación. Las intercalaciones no reconocidas pueden hacer que la aplicación devuelva errores y falle. Tenga en cuenta las siguientes soluciones: Actualice el sistema operativo cliente para que se actualicen las intercalaciones del sistema subyacentes. Si el cliente tiene instalado software cliente de base de datos, considere la posibilidad de aplicar una actualización de servicio al software cliente de base de datos. Seleccione una ordenación existente que se mapee a una página de códigos en el 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 cualquier tipo de usuario o ensamblados con nombres en conflicto. El Asesor de actualizaciones aconsejará cambiar el nombre de cualquier ensamblado en conflicto y cambiar el nombre de cualquier tipo en conflicto o usar nombres de dos partes en el código para hacer referencia a ese tipo de usuario preexistente.Si una actualización de base de datos detecta un ensamblado de usuario con un nombre en conflicto, cambiará automáticamente el nombre de ese ensamblado y colocará la base de datos en modo sospechoso. 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 la integración clR de SQL Server use el ensamblado. Para obtener más información, vea Bibliotecas de .NET Framework compatibles. Después de actualizar su base de datos, servicie o actualice la copia del ensamblado dentro de sus 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 detectar si usa cualquier biblioteca de .NET Framework no compatible en la aplicación, ejecute la siguiente consulta en la base de datos. SELECT name FROM sys.assemblies WHERE clr_name LIKE '%publickeytoken=b03f5f7f11d50a3a,%'; |
Rutinas CLR | El uso de la suplantación dentro de funciones definidas por el usuario, agregados definidos por el usuario o tipos definidos por el usuario (UDT) de CLR puede provocar que tu aplicación falle con el error 6522 después de actualizar a SQL Server 2008. Los escenarios siguientes se realizan correctamente en SQL Server 2005, pero se produce un error en SQL Server 2008. Se proporcionan resoluciones para cada escenario. Un método de función CLR definido por el usuario, un agregado definido por el usuario o un método UDT que utiliza 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 en el método , vuelva a compilar el ensamblado y vuelva a implementar la rutina y el ensamblado.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 en el método , vuelva a compilar el ensamblado y vuelva a implementar la rutina y el ensamblado. Función CLR que devuelve valores de tabla y 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
Vista | 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_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 ejecución de consultas de solución de problemas. 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. |
Plan de exhibició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 , uno o varios elementos SeekPredicateNew ahora pueden aparecer en el XML del plan de presentación. Los dos elementos son mutuamente excluyentes. 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, vea . |
Esquema XML del Showplan | Se agrega un nuevo atributo IndexKind al tipo complejo ObjectType en el esquema XML showplan. Las aplicaciones que validan estrictamente los planes de SQL Server contra el esquema de SQL Server 2005 fallarán. |
Transact-SQL
Característica | Descripción |
---|---|
evento DDL de ALTER_AUTHORIZATION_DATABASE | En SQL Server 2005, cuando se activa el evento DDL ALTER_AUTHORIZATION_DATABASE, el valor 'object' se devuelve en el elemento ObjectType del XML de EVENTDATA para este evento cuando el tipo de entidad del elemento asegurable 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, "tabla" o "función". |
CONVERTIR | Si se pasa un estilo no válido a la función CONVERT, se devuelve un error cuando el tipo de conversión es binario a carácter o carácter a binario. En versiones anteriores de SQL Server, el estilo no válido se establece en el estilo predeterminado para conversiones binarias a caracteres y caracteres a binarios. |
GRANT/DENY/REVOKE EXECUTE en ensamblados | El permiso EXECUTE no se puede conceder, denegar ni revocar a los ensamblados. Este permiso no tiene ningún efecto y ahora produce un error. Conceda, deniegue o revoque el permiso EXECUTE en los procedimientos almacenados o funciones que hacen referencia al método de ensamblado en su lugar. |
Permisos de GRANT/DENY/REVOKE en tipos de sistemas | 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 una subconsulta en una expresión que se usa para el grupo por lista. 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 realizará 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 el comportamiento no determinista, la cláusula OUTPUT no puede hacer referencia a una columna desde una vista o función con valores de tabla insertados cuando una de las columnas se define mediante uno de los métodos siguientes: Una subconsulta. Función definida por el usuario que realiza el acceso a datos de usuario o del sistema, o se supone que realiza dicho acceso. Columna calculada que contiene en su definición una función definida por el usuario que realiza el acceso a datos del usuario o del sistema. Cuando SQL Server detecta dicha columna en la cláusula OUTPUT, se genera 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 ningún desencadenador habilitado. |
opción de nivel de servidor para precalcular rango | Esta opción no se admite en SQL Server 2008. Modifique las aplicaciones que actualmente usan esta característica lo antes posible. |
Sugerencia de tabla READPAST | No se puede especificar la sugerencia READPAST en Aislamiento de instantáneas. La sugerencia READPAST se omite cuando la opción de base de datos READ_COMMITTED_SNAPSHOT o ALLOW_SNAPSHOT_ISOLATION está configurada en ON. Sin embargo, si combina la sugerencia READPAST con READCOMMITTEDLOCK, el comportamiento READPAST es el mismo que con la sugerencia 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: Ahora el nombre del grupo es GroupName. NombreDelRol Group_name es ahora: Role_name Group_id ahora es: Role_id Users_in_group está ahora: Usuarios_en_rol |
Cifrado de datos transparente | El cifrado de datos transparente (TDE) se realiza en el nivel de E/S: la estructura de páginas no se cifra en la memoria y se cifra solo cuando la página se escribe en el disco. Los archivos de base de datos y los archivos de registro se cifran. Las aplicaciones de terceros que omiten el mecanismo normal de SQL Server 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 Datetime | En SQL Server 2005, los tipos xs:time de datos , xs:date y xs:dateTime no tienen compatibilidad con la zona horaria. Los datos de 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 una zona horaria. Se modifica la representación de almacenamiento interna. Se aumenta la resolución de valores almacenados. No se permiten años negativos. Nota: Modifique las aplicaciones y las expresiones XQuery para tener en cuenta los nuevos valores de tipo. |
Expresiones 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 siguiente instrucción contiene una prueba de nombre (CTR02) dentro de la expresión de ruta 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 no se permite porque no se ajusta a los estándares XML. Se devuelve el error 9341. Quite los dos puntos iniciales o especifique un prefijo para el nombre test(por ejemplo, (n$/CTR02) o (n$/p1:CTR02). |
Conectando
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 certificados cuyos sujetos especifican Nombres de Dominio Completamente Cualificados (FQDN) se han conectado en el pasado porque no se han aplicado validaciones estrictas. SQL Server 2008 R2 mejora la seguridad aplicando sujetos de FQDN para certificados. Las aplicaciones que dependen de la validación relajada deben realizar una de las siguientes acciones: Use 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 dura. -Esta opción no funciona para las aplicaciones que usan Reflejo de Base de Datos, ya que el servidor reflejado responde con un nombre simple. |
Agregue un alias al nombre corto para mapearlo al FQDN. -Esta opción funciona incluso para las aplicaciones que tienen sus cadenas de conexión codificadas de forma dura. -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. |
|
Tener un certificado emitido para shortname. -Esta opción funciona para todas las aplicaciones. |
Cambios importantes 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 no procesan las páginas web archivadas, como Bing.com y Google.com. Pero puede ver estos archivos en la dirección de Docs previous-versions/:
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
La documentación de SQL Server 2014 se ha archivado y ya no la procesan los motores de búsqueda. Los artículos de 2014 ahora están marcados como NOINDEX y NOFOLLOW.
La versión más reciente de SQL Server, junto con otras versiones recientes, se documenta aquí.
Véase 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)
Cambios importantes en las características de las herramientas de administración en SQL Server 2014