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

Actualizado: 17 de noviembre de 2008

En este tema se describen los cambios realizados en el Database Engine (Motor de base de datos) de Microsoft SQL Server 2005 que pueden hacer que las aplicaciones basadas en versiones anteriores de SQL Server no funcionen.

Conectividad cliente/servidor

Característica Descripción

Protocolos de red SPP (Protocolo de paquetes secuenciados) de Banyan VINES, Multiprotocolo, AppleTalk y NWLink IPX/SPX

SQL Server 2005 no es compatible con los protocolos de red SPP (Protocolo de paquetes secuenciados) de Banyan VINES, Multiprotocolo, AppleTalk y NWLink IPX/SPX. Para conectarse a SQL Server 2005, las aplicaciones cliente deben usar un protocolo compatible. Si ha configurado un alias que utiliza uno de los protocolos no compatibles, deberá modificar el alias para que utilice uno compatible.

Si la cadena de conexión de la aplicación utiliza o carga específicamente uno de los protocolos no compatibles, mediante la especificación de la propiedad NETWORK=DBMSRPCN para RPC, NETWORK=DBMSADSN para Appletalk, o NETWORK=DBMSVINN para Banyan VINES, o bien mediante el uso de un prefijo explícito, por ejemplo spx:server\instancia para SPX, bv:servidor para Banyan VINES, adsp:servidor para AppleTalk, o rpc:servidor para multiprotocolo, deberá modificar la aplicación para que utilice uno de los protocolos compatibles.

Para obtener más información, vea Elegir un protocolo de red.

MDAC

Las versiones de MDAC anteriores a MDAC 2.6 no admiten instancias con nombre. Para permitir conexiones de aplicación con instancias con nombre, actualice a la versión actual de MDAC.

Proxy Winsock

El proxy Winsock no se puede configurar con las herramientas de SQL Server. Para obtener información sobre cómo configurar el proxy Winsock, vea la documentación del servidor proxy.

Opciones de configuración

Característica

Descripción

AUTO_UPDATE_STATISTICS

Configure AUTO_UPDATE_STATISTICS en ON antes de actualizar una base de datos. De otro modo, las estadísticas de la base de datos no se actualizarán como parte de la actualización a SQL Server 2005. La dependencia de las estadísticas de una versión anterior de SQL Server puede hacer que los planes de consulta que no sean óptimos. Si establece AUTO_UPDATE_STATISTICS en ON, todas las estadísticas se actualizarán en cuanto se haga referencia a ellas por primera vez. La actualización de las estadísticas aumenta la probabilidad de que se seleccionen planes de consulta más óptimos al ejecutar las consultas.

ms143179.note(es-es,SQL.90).gifNota:

En algunos casos, después de establecer AUTO_UPDATE_STATISTICS en ON, el proceso de actualización de estadísticas puede afectar al rendimiento de servidor de las consultas cuando se haga referencia a las estadísticas por primera vez.

Para establecer la opción AUTO_UPDATE_STATISTICS de una base de datos en ON mediante el comando SET, utilice la instrucción ALTER DATABASE, o ejecute sp_updatestats para actualizar las estadísticas de la base de datos.

Opción max server memory

En SQL Server 2000, el grupo de búferes de SQL Server puede superar el límite especificado por la opción max server memory, siempre que la memoria física del sistema esté disponible. En SQL Server 2005, el grupo de búferes no puede superar el valor de max server memory. Cuando se alcanza este límite, la consulta produce el error "memoria de sistema insuficiente".

Si recibe este error y la opción max server memory está configurada, aumente el valor de la opción o restablézcalo al valor predeterminado de 2147483647. Para obtener más información, vea Opciones de memoria del servidor.

Opción query governor cost limit

Al aplicar SET GOVERNOR_QUERY_COST_LIMIT o la opción query governor cost limit de sp_configure, puede ocasionarse que las consultas que se ejecutaban en una versión anterior de SQL Server no se ejecuten en SQL Server 2005. Este comportamiento se produce debido a los cambios en el modelado del costo de consultas.

Actualice la configuración de la opción query governor cost limit de la conexión o de la instancia del servidor a un valor adecuado, o establézcala en 0 para no especificar ningún límite en el período de tiempo en que se puede ejecutar una consulta.

Bases de datos, archivos de datos y archivos de registro

Característica Descripción

Unidades comprimidas

SQL Server 2005 no puede crear ni actualizar bases de datos en unidades comprimidas. Al instalar SQL Server 2005, seleccione una unidad sin comprimir para las bases de datos del sistema y compruebe que las bases de datos que va a actualizar no están en unidades comprimidas. No obstante, tenga en cuenta que una vez actualizada la base de datos, puede colocar bases de datos de sólo lectura y grupos de archivos secundarios de sólo lectura en un sistema de archivos comprimidos NTFS.

Archivos de datos

Se necesita espacio de disco adicional para que los archivos de datos controlen los siguientes cambios:

  • Los metadatos adicionales del sistema se crean y se mantienen en el grupo de archivos PRIMARY de cada una de las bases de datos de usuario para los objetos de base de datos y los permisos de usuario. Por ejemplo, en versiones anteriores de SQL Server, los permisos asociados con el que los concede o con el beneficiario se almacenan en una fila única como mapa de bits. En SQL Server 2005, el mapa de bits se expande en varias filas.
  • Las columnas de objetos grandes (LOB) definidas como tipos de datos text, ntext o image necesitan un espacio en disco adicional de 40 bytes por columna. Este aumento de espacio único se produce durante la primera actualización de cada columna LOB.
  • La asignación de Id. de documento (DOCID) de texto se almacena en el archivo de datos en lugar de almacenarse en el catálogo de texto.

Para asegurarse de que los recursos pueden controlar los aumentos de tamaño durante la actualización y las operaciones de producción posteriores, se recomienda que establezca el crecimiento automático en ON para todos los archivos de datos de usuario antes de actualizar a SQL Server 2005. Después de actualizar y probar las cargas de trabajo, puede ser conveniente que establezca el crecimiento automático en OFF o ajuste el incremento de FILEGROWTH según corresponda. Para obtener más información, vea ALTER DATABASE (Transact-SQL).

Modo de compatibilidad de base de datos

Cuando se actualiza una base de datos de una versión anterior de SQL Server a SQL Server 2005, la base de datos mantiene su nivel de compatibilidad. Si cambia el modo de compatibilidad a 90 después de la actualización, las diferencias en el modo de compatibilidad pueden afectar a sus aplicaciones. Para obtener más información sobre estas diferencias, vea sp_dbcmptlevel (Transact-SQL).

Id. de base de datos 32767

En SQL Server 2005, este Id. de base de datos está reservado. Separe la base de datos antes de la actualización.

Grupos de archivos

Todas las bases de datos de la instancia de SQL Server deben tener los grupos de archivos establecidos en READ_WRITE antes de la actualización a SQL Server 2005. Utilice ALTER DATABASE para establecer el grupo de archivos en READ_WRITE.

Archivos de registro

En SQL Server 2005, se necesita espacio de disco adicional para los archivos de registro de transacciones. Durante la fase de deshacer de una recuperación de errores, SQL Server 2005 permite a los usuarios tener acceso a la base de datos. Esto es posible porque las transacciones que no estaban confirmadas cuando se produjo el error vuelven a adquirir los bloqueos que mantenían antes del error. Mientras las transacciones se revierten, los bloqueos las protegen de las interferencias de los usuarios. Esta información de bloqueo adicional debe conservarse en el registro de transacciones.

Para asegurarse de que los recursos pueden controlar los aumentos de tamaño durante la actualización y las operaciones de producción posteriores, se recomienda que establezca el crecimiento automático en ON para todos los archivos de datos de usuario antes de actualizar a SQL Server 2005. Después de actualizar y probar las cargas de trabajo, puede ser conveniente que establezca el crecimiento automático en OFF o ajuste el incremento de FILEGROWTH según corresponda. Para obtener más información, vea ALTER DATABASE (Transact-SQL).

Base de datos model

En SQL Server 2005, la base de datos model contiene los siguientes cambios:

  • Tamaño mínimo más grande.
  • Nivel de compatibilidad establecido en 90.
  • Opción de base de datos PAGE_VERIFY establecida en CHECKSUM.

Base de datos tempdb

Se necesita espacio de disco adicional para los archivos de datos y registro de la base de datos tempdb en SQL Server 2005. Para asegurarse de que los recursos pueden controlar los aumentos de tamaño durante la actualización y las operaciones de producción posteriores, se recomienda que establezca el crecimiento automático en ON para todos los archivos de datos y registro de la base de datos tempdb antes de actualizar a SQL Server 2005. Después de actualizar y probar las cargas de trabajo, puede ser conveniente que establezca el crecimiento automático en OFF o ajuste el incremento de FILEGROWTH según corresponda.

Para obtener más información, vea Solucionar problemas de espacio en disco insuficiente en tempdb.

Características

Característica

Descripción

Procedimientos almacenados extendidos

Es posible que los procedimientos almacenados extendidos registrados anteriormente sin la ruta de acceso completa para el nombre DLL no funcionen después de realizar la actualización a SQL Server 2005. Esto se debe a que, durante el proceso de actualización, no se agrega el antiguo directorio BINN a la nueva ruta de acceso. Es posible que SQL Server no pueda encontrar los procedimientos almacenados extendidos.

Antes de actualizar a SQL Server 2005, siga estos pasos para cada procedimiento almacenado extendido que no se haya registrado con un nombre completo de ruta de acceso:

  1. Ejecute sp_dropextendedproc para quitar el procedimiento almacenado extendido.
  2. Ejecute sp_addextendedproc para registrar el procedimiento almacenado extendido con el nombre completo de ruta de acceso.

Trasvase de registros

El trasvase de registros en versiones anteriores de SQL Server no es compatible con el trasvase de registros de SQL Server 2005 y no se puede actualizar directamente. Después de la actualización a SQL Server 2005, vuelva a configurar el trasvase de registros con SQL Server Management Studio o mediante procedimientos almacenados. Para obtener más información, vea Migrar una configuración de trasvase de registros de SQL Server 2000 a SQL Server 2005.

Utilidad osql

La utilidad osql no admite los comandos ED y !!. Quite las referencias a los comandos ED y !! de las secuencias de comandos. Para usar los comandos ED y !!, use la utilidad sqlcmd en su lugar.

Proveedor WMI SQL-DMO

No se incluye el proveedor WMI SQL-DMO y no está disponible.

SQL Mail

SQL Server admite la actualización de SQL Mail desde SQL Server 7.0 o SQL Server 2000; sin embargo, SQL Server 2005 requiere Microsoft Outlook 2002 o una versión posterior como cliente de correo.

ms143179.note(es-es,SQL.90).gifNota:

Esta característica se quitará en una versión futura de Microsoft SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan. Para enviar correo desde SQL Server 2005, utilice el Correo electrónico de base de datos.

SQL Mail

Cuando un cliente que se ha conectado mediante la autenticación de SQL Server intenta enviar correo de SQL Mail que contiene datos adjuntos, SQL Server no puede establecer un contexto de seguridad apropiado y devolverá un error. Para evitar este problema, use la autenticación de Windows.

API de espacio de nombres SQL (SQL-NS)

No se incluye la API de espacio de nombres SQL (SQL-NS) y no está disponible.

Marcas de traza

En SQL Server 2000, una marca de traza establecida en la sesión A no surte efecto automáticamente en una sesión B ya existente. Sólo surte efecto después de la primera vez que la marca de traza se establece en la sesión B. Este comportamiento no es determinista en SQL Server 2000 y es determinista en SQL Server 2005. En SQL Server 2005, las marcas de traza globales establecidas en la sesión A se establecen inmediatamente en otras sesiones simultáneas.

Igualmente, en SQL Server 2005, las marcas de traza se pueden especificar como locales o globales utilizando un argumento adicional en la instrucción DBCC TRACEON. Si el segundo argumento no se especifica, el valor predeterminado en SQL Server 2005 será local. Esto es diferente en SQL Server 2000, donde el valor predeterminado es global.

Para obtener más información, vea Marcas de traza (Transact-SQL).

Marcas de traza

Algunas marcas de traza de SQL Server 2000 no existen en SQL Server 2005. Igualmente, algunas de ellas tienen una funcionalidad diferente en SQL Server 2005. Debe deshabilitar todas las marcas de traza antes de actualizar a SQL Server 2005. Después de la actualización, compruebe que la funcionalidad de la marca de traza no ha cambiado. Compruebe también que la marca de traza sigue siendo necesaria antes de volver a habilitarla.

Desencadenadores

En SQL Server 2005, las instrucciones del lenguaje de definición de datos (DDL), por ejemplo CREATE INDEX, no se pueden ejecutar en las tablas insertadas y eliminadas dentro de desencadenadores DML. En las versiones anteriores de SQL Server, algunas instrucciones DDL se pueden ejecutar en las tablas insertadas y eliminadas. Para obtener más información, vea Usar las tablas inserted y deleted.

Nombres de índice duplicados

En SQL Server 2005, no se admiten los nombres de índice de vista o tabla duplicados. Cambie el nombre de los índices para quitar los duplicados antes de la actualización.

  1. Busque los índices duplicados ejecutando la siguiente consulta:

    SELECT DISTINCT OBJECT_NAME(o.id), name
    FROM sysindexes as o
    WHERE EXISTS 
        (SELECT name FROM sysindexes  as i
          WHERE i.id = o.id
          AND i.name = o.name and i.indid < o.indid);
    
  2. Utilice sp_rename para cambiar uno de los nombres de índice. Como los nombres de índice son los mismos, no puede determinar el índice al que cambiará el nombre. Este paso le permite diferenciar los índices.

    EXEC sp_rename N'table_name.index_name', N'new_index_name, N'INDEX'
    
  3. Compruebe que ha cambiado el nombre del índice ejecutando la siguiente consulta. Esta consulta devuelve todos los índices (incluidos los nombres de columnas de claves) de la vista o tabla especificada.

    SELECT i.name AS IndexName, c.name AS ColumnName, ik.colid, ik.keyno
    FROM sysindexes i
    JOIN sysindexkeys ik ON i.id = ik.id and i.indid = ik.indid 
    JOIN syscolumns c ON c.id = ik.id and ik.colid = c.colid
    WHERE i.id = OBJECT_ID('table_or_view_name')
    
  4. Si fuera necesario, utilice de nuevo sp_rename para corregir los nombres de índice.

Nombres de objetos

En SQL Server 2005, no es posible utilizar el carácter 0xFFFF en los nombres de objetos. No se podrá tener acceso a un nombre de objeto que contenga este carácter Unicode cuando la base de datos esté en el nivel de compatibilidad 90. Cambie el nombre de los objetos que contienen este carácter.

Coincidencia de las variables de tabla y la intercalación de columna

En SQL Server 2000, las columnas definidas en variables de tabla se convierten implícitamente a la intercalación de la base de datos tempdb. En SQL Server 2005, las columnas definidas en variables de tabla se convierten implícitamente a la intercalación de la base de datos actual. Las consultas que confían en el comportamiento de SQL Server 2000 pueden devolver resultados inesperados, por ejemplo, un número diferente o el orden de las filas devueltas.

Por ejemplo, la comparación de igualdad de c1 de las columnas y c2 en la cláusula WHERE de la instrucción SELECT siguiente puede devolver más o menos filas cuando se utiliza la intercalación de la base de datos TestDB en lugar de la intercalación de tempdb. Por ejemplo, los valores 'Nombre' y 'nombre' se evaluarían como iguales cuando la intercalación no distinguiera entre mayúsculas y minúsculas, y como diferentes cuando no se hiciera tal distinción.

CREATE DATABASE TestDB COLLATE Estonian_CS_AI;
GO
USE TestDB;
DECLARE @TempTable table (c1 varchar(10), c2 varchar(10);
SELECT * FROM @TempTable WHERE c1 = c2;

Para utilizar una intercalación distinta de la intercalación de base de datos actual en una variable de tabla, especifíquela en la definición de las columnas de la instrucción DECLARE o en la consulta que haga referencia a las columnas. En el ejemplo siguiente se muestran ambos métodos.

USE TestDB;
DECLARE @TempTable table (c1 varchar(10)COLLATE Latin1_General_CS_AS, c2 varchar(10)COLLATE Latin1_General_CS_AS);
SELECT * FROM @TempTable WHERE c1 = c2;
GO
-- or

DECLARE @TempTable table (c1 varchar(10), c2 varchar(10));
SELECT * FROM @TempTable WHERE c1 = c2 COLLATE Latin1_General_CS_AS;
GO

Vistas indizadas

Característica Descripción

Determinismo de función

Las siguientes expresiones de función se consideran no deterministas en SQL Server 2005 y, por lo tanto, pueden interferir en la creación de vistas indizadas:

  • Las referencias a literales de cadena que se convierten de manera implícita en datetime y smalldatetime.
  • Conversión implícita de datos de caracteres no Unicode entre intercalaciones.

Las expresiones que impliquen la conversión implícita de cadenas de caracteres a datetime o smalldatetime se considerarán no deterministas en SQL Server 2005, a menos que el nivel de compatibilidad se establezca en 80 o anterior. Esto se debe a que los resultados dependen de los valores LANGUAGE y DATEFORMAT de la sesión de servidor. Por ejemplo, los resultados de la expresión CONVERT (datetime, '30 listopad 1996', 113) dependen del valor de LANGUAGE porque la cadena 'listopad' significa distintos meses en distintos idiomas. De forma similar, en la expresión DATEADD(mm,3,'2000-12-01'), SQL Server interpretará la cadena '2000-12-01' en función del valor de DATEFORMAT.

La conversión implícita de datos de caracteres no Unicode entre intercalaciones también se considera no determinista, a menos que el nivel de compatibilidad se establezca en 80 o anterior.

La creación de índices en vistas que contienen estas expresiones no se admite en el nivel de compatibilidad de base de datos 90. Aunque puedan mantenerse las vistas existentes que contengan estas expresiones de una base de datos actualizada, el optimizador de consultas no las tendrá en cuenta en los planes de consulta, ya sea el nivel de compatibilidad 80 ó 90. Para obtener más información sobre cómo establecer los niveles de compatibilidad, vea sp_dbcmptlevel (Transact-SQL).

En la definición de vistas indizadas de SQL Server 2005, debe convertir explícitamente el literal al tipo de fecha deseada mediante un estilo de formato de fecha determinista. Para consultar una lista de los estilos de formato de fecha deterministas, vea CAST y CONVERT (Transact-SQL).

Si utiliza conversiones implícitas de cadena a fecha en vistas indizadas existentes que se han actualizado a SQL Server 2005, debe asegurarse de que los valores LANGUAGE y DATEFORMAT son coherentes en las bases de datos y en las aplicaciones para impedir posibles daños en las vistas indizadas.

IGNORE_DUP_KEY

Cuando cree un índice agrupado único en una vista de SQL Server 2005, la opción IGNORE_DUP_KEY deberá estar establecida en OFF. Ésta es la configuración predeterminada. Si establece IGNORE_DUP_KEY en ON se pueden dañar las vistas indizadas.

Elimine el índice agrupado de la vista y vuelva a crearlo sin especificar la opción IGNORE_DUP_KEY.

Sugerencias de consulta

Las sugerencias de consulta de las definiciones de vistas indizadas se omiten en el nivel de compatibilidad 80. Esto puede hacer que algunas aplicaciones se comporten de manera diferente entre los niveles de compatibilidad 80 y 90. Para obtener más información, vea Diseñar vistas indizadas, Crear vistas indizadas y Query Hint (Transact-SQL).

Seguridad

Característica Descripción

Nombres de inicio de sesión

Los siguientes nombres de funciones fijas de servidor están reservados en SQL Server 2005 y no se pueden utilizar como nombres de inicio de sesión definidos por el usuario.

  • sysadmin
  • serveradmin
  • setupadmin
  • securityadmin
  • processadmin
  • dbcreator
  • diskadmin
  • bulkadmin

Antes de la actualización a SQL Server 2005, siga estos pasos:

  1. Registre los identificadores de seguridad (SID) de los inicios de sesión ejecutando la siguiente instrucción:

    SELECT name, sid 
    FROM master.dbo.syslogins 
    WHERE name IN('sysadmin', 'serveradmin','setupadmin',
     'securityadmin','processadmin', 'dbcreator','diskadmin',
     'bulkadmin')
  2. Elimine los inicios de sesión.
  3. Utilice el procedimiento del sistema sp_addlogin para crear nuevos inicios de sesión. Especifique el SID devuelto en el paso 1 en el parámetro @sid de cada inicio de sesión correspondiente.

Identificador de seguridad (SID) de inicio de sesión

En SQL Server 2005, no se admiten los identificadores de seguridad (SID) duplicados. Quite uno de los inicios de sesión y los usuarios asociados antes de la actualización.

Asignación de inicio de sesión remoto

En versiones anteriores de SQL Server, los inicios de sesión que proceden de instancias remotas de SQL Server se pueden marcar como de confianza utilizando el procedimiento almacenado del sistema sp_remoteoption. SQL Server 2005 no es compatible con este método de etiquetado de inicios remotos. Después de actualizar a SQL Server 2005, los inicios de sesión remotos ya no se marcarán como de confianza.

Para configurar y administrar inicios de sesión remotos, utilice servidores vinculados y procedimientos almacenados de servidores vinculados. Para obtener más información, vea Vincular servidores.

Inicios de sesión de SQL Server 6.5

SQL Server 6.5 guarda los valores de hash de contraseñas en un formato que ya no se admite. La antigua contraseña no se puede actualizar directamente a SQL Server 2005.

Para habilitar este inicio de sesión, debe restablecer su contraseña. Puede restablecer la contraseña utilizando ALTER LOGIN:

ALTER LOGIN <login name> WITH PASSWORD = '<new password>' MUST_CHANGE

La nueva contraseña se validará con la directiva de complejidad de contraseñas del sistema, a menos que la comprobación de directivas esté deshabilitada. Se recomienda utilizar contraseñas complejas y no deshabilitar la comprobación de directivas. La opción MUST_CHANGE obliga al usuario a seleccionar una contraseña nueva. Esto no es necesario, pero es recomendable.

Puede identificar los inicios de sesión de SQL Server 6.5 latentes utilizando la siguiente consulta:

SELECT * FROM sysxlogins WHERE (xstatus & 2048) = 2048;
GO

nombre de usuario sys

El nombre sys está reservado en SQL Server 2005 y no se puede utilizar como nombre de usuario. Cambie el usuario antes de actualizar a SQL Server 2005. Si no se cambia el nombre del usuario, la base de datos se encontrará en un estado de sospecha después del proceso de actualización y no estará disponible hasta que la base de datos se ponga en conexión.

Procedimiento antes de la actualización

Antes de actualizar a SQL Server 2005, en cada base de datos que contenga el usuario sys, haga lo siguiente:

  1. Cree un nuevo usuario.
  2. Utilice la siguiente instrucción para mostrar todos los permisos concedidos por el usuario sys y concedidos al usuario sys.

    -- Return permissions granted by user sys.
    SELECT * FROM sysprotects WHERE grantor = USER_ID('sys')
    -- Return permissions granted to user sys.
    SELECT * FROM sysprotects WHERE uid = USER_ID('sys')
  3. Para transferir al nuevo usuario la propiedad de todos los objetos pertenecientes a sys, utilice sp_changeobjectowner.
  4. Quite el usuario sys.
  5. Para restaurar los permisos originales capturados en el paso 2, utilice la cláusula AS new_user de la instrucción GRANT.
  6. Modifique las secuencias de comandos que hacen referencia al nuevo usuario.

Procedimiento después de la actualización

Si no se ha cambiado el nombre al usuario sys, haga lo siguiente:

  1. Ejecute la instrucción ALTER DATABASE db_name SET ONLINE. La base de datos estará en modo SINGLE_USER.
  2. Siga todos los pasos de la sección "Procedimiento antes de la actualización".
  3. Ejecute la instrucción ALTER DATABASE db_name SET MULTI_USER.

Objetos de sistema y metadatos

Característica Descripción

INFORMATION_SCHEMA.COLUMNS

En SQL Server 2005, la columna ORDINAL_POSITION de la vista INFORMATION_SCHEMA.COLUMNS no es compatible con el patrón de bits devuelto por la función COLUMNS_UPDATED.

Para obtener un patrón de bits que sea compatible con COLUMNS_UPDATED, haga referencia a la propiedad ColumnID de la función de sistema COLUMNPROPERTY cuando realice una consulta de la vista INFORMATION_SCHEMA.COLUMNS, como aparece en el siguiente ejemplo:

SELECT TABLE_NAME, COLUMN_NAME,
    COLUMNPROPERTY(OBJECT_ID(TABLE_SCHEMA + '.' + TABLE_NAME),
    COLUMN_NAME, 'ColumnID') AS COLUMN_ID
FROM AdventureWorks.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Contact';

INFORMATION_SCHEMA.SCHEMATA

En las versiones anteriores de SQL Server, la vista INFORMATION_SCHEMA.SCHEMATA devolvía todas las bases de datos de una instancia de SQL Server. En SQL Server 2005, la vista devuelve todos los esquemas de una base de datos. Este comportamiento cumple con el estándar SQL. Para obtener más información, vea SCHEMATA (Transact-SQL).

Nombres de columna INFORMATION_SCHEMA que coinciden con el valor '%SCHEMA'

En las versiones anteriores de SQL Server, los nombres de columna de INFORMATION_SCHEMA que coinciden con el valor '%SCHEMA' devuelven el nombre del usuario. En SQL Server 2005, estas columnas devuelven el nombre de esquema. Cuando una base de datos se actualiza a SQL Server 2005, el nombre de esquema siempre será el mismo que el nombre de usuario y todas las aplicaciones que hagan referencia a estas columnas no producirán errores. No obstante, los usuarios que implementen características de separación esquema-usuario de SQL Server 2005 en las bases de datos deben tener en cuenta que las aplicaciones pueden producir errores si los datos esperados son un nombre de usuario en lugar de un nombre de esquema.

Para obtener más información, vea Separación de esquemas de usuario.

sp_helptrigger

SQL Server 2005 agrega trigger_schema como la última columna del conjunto de resultados devuelto por el procedimiento almacenado del sistema sp_helptrigger. Revise el uso de sp_helptrigger en aplicaciones. Puede que tenga que modificar las aplicaciones para ajustar la columna adicional. O bien, puede utilizar en su lugar la vista de catálogo sys.triggers.

syslockinfo y sp_lock

En SQL Server 2000, las columnas rsc_objid and rsc_indid de syslockinfo y las columnas objid e indid de sp_lock consistently devuelven sistemáticamente los identificadores de objeto y de índice. En SQL Server 2005, puede devolverse el valor 0.

En SQL Server 2000, syslockinfo y sp_lock devuelven dos filas, como máximo, para un determinado recurso de bloqueo en una única transacción. En SQL Server 2005, cuando está habilitada la partición de bloqueos, pueden devolverse varias filas del mismo recurso que se ejecuta en una sola transacción. Puede haber hasta N + 1 filas devueltas, donde N es el número de CPU. Además, en SQL Server 2005, se pueden mostrar las solicitudes GRANTED y WAITING para el mismo recurso; en SQL Server 2000, estas solicitudes no se pueden mostrar para el mismo recurso. Para obtener más información, vea sp_lock (Transact-SQL) y sys.syslockinfo (Transact-SQL).

Coincidencia de intercalación del nombre de objeto de sistema y el nombre de tipo de sistema

En las versiones anteriores de SQL Server, los nombres de objeto de sistema y de tipo de sistema coinciden con la intercalación de la base de datos maestra. En SQL Server 2005, los nombres de objeto de sistema y los nombres de tipo de sistema se convierten automáticamente para corresponderse con la intercalación de la base de datos actual. Si las referencias a estos objetos en la secuencia de comandos o en la aplicación no coinciden con las que aparecen en el catálogo y la base de datos actual tiene una intercalación que distingue mayúsculas de minúsculas, la secuencia de comandos o la aplicación pueden experimentar errores. Por ejemplo, la instrucción EXEC SP_heLP producirá errores si la base de datos actual tiene una intercalación que distingue mayúsculas de minúsculas.

Modificación de objetos de sistema

En SQL Server 2005, no están permitidas las actualizaciones directas del catálogo del sistema. Cualquier intento generará el siguiente error:

"Servidor: mensaje 259, nivel 16, estado 1, línea 1"

"No están permitidas las actualizaciones ad hoc de los catálogos del sistema".

Modifique las secuencias de comandos de SQL para que utilicen API documentadas y oficiales. Por ejemplo, utilice ALTER DATABASE database_name SET EMERGENCY en lugar de ejecutar una instrucción UPDATE en la tabla del sistema sysdatabases.

Eliminación de objetos de sistema

Las instrucciones como DROP TABLE, DROP PROCEDURE y sp_dropextendedproc no se pueden utilizar para quitar objetos de sistema porque estos objetos se implementan en la base de datos de recursos de sólo lectura.

Quite todas las instrucciones que intenten eliminar objetos de sistema de las aplicaciones. Modifique las aplicaciones para revocar o denegar el permiso EXECUTE en objetos de sistema. O bien, utilice una de las herramientas de Configuración de superficie de SQL Server 2005 para deshabilitar algunos de estos objetos. Por ejemplo, el procedimiento almacenado extendido xp_cmdshell se puede deshabilitar o habilitar con las herramientas de Configuración de superficie.

sysperfinfo

En SQL Server 2005, sysperfinfo devuelve un valor bigint para la columna cntr_value. Modifique las aplicaciones que utilizan sysperfinfo para asegurarse de que puedan controlar los valores de tipo bigint de la columna cntr_value.

En SQL Server 2005, sysperfinfo es una vista de compatibilidad. Debe utilizar en su lugar la vista de administración dinámica sys.dm_os_performance_counters.

Consulta de tablas del sistema utilizando 'dbo' en los criterios de búsqueda

En las versiones anteriores de SQL Server, los objetos de sistema pertenecían a dbo y residían en la base de datos maestra. En SQL Server 2005, los objetos de sistema pertenecen a sys y aparecen lógicamente en cada base de datos. Las instrucciones que consulten las tablas del sistema y tengan criterios de búsqueda que especifiquen el usuario dbo producirán errores.

Transact-SQL

Característica Descripción

@@VERSION

SQL Server 2005 devuelve información más detallada que SQL Server 2000, en el formato versión principal.versión secundaria.compilación.compilación incremental.

CREATE STATISTICS

En SQL Server 2005, no se admite la especificación de WITH ROWS en las instrucciones CREATE STATISTICS. Modifique las instrucciones CREATE STATISTICS que incluyan WITH ROWS especificando SAMPLE number entre WITH y ROWS, o especificando otras opciones que cumplan con la sintaxis documentada.

DISK INIT

La instrucción DISK INIT, usada en versiones anteriores de SQL Server para crear dispositivos de registro de transacciones o base de datos, se ha quitado en SQL Server 2005. Reemplace todas las repeticiones de esta instrucción por las instrucciones equivalentes CREATE DATABASE o ALTER DATABASE.

UNION dentro de una instrucción INSERT INTO...SELECT

Cuando un operador UNION está dentro de una instrucción INSERT, SQL Server 2005 convierte el tipo de datos de cada operación UNION por separado, según las reglas de la conversión de tipo de datos. A continuación, los tipos de datos del resultado final de la operación UNION se convierten en las columnas correspondientes de la tabla de destino de la operación INSERT. Este cambio en el comportamiento puede producir errores de conversión de tipos de datos en las aplicaciones.

En el siguiente ejemplo se muestra un error de conversión de tipos de datos. En niveles de compatibilidad 80 y anteriores, la constante entera 1 de la primera instrucción SELECT se convierte directamente en el tipo de dato de la columna de destino ReturnedValue, que es varchar(255). En el nivel de compatibilidad 90, el tipo de datos del conjunto de resultados UNION se determina antes de la conversión en la columna de destino. Para la segunda columna de la primera instrucción SELECT, se determina que el tipo de datos sea int. Para la segunda columna de la segunda instrucción SELECT, se determina que el tipo de datos sea varchar(4). Como el tipo de datos int tiene una prioridad mayor que el tipo de datos varchar(4), cuando se determinan los tipos de datos del conjunto de resultados UNION, el valor test se convierte en el tipo de datos int y produce un error de conversión de tipos de datos.

CREATE TABLE #test(ReturnedName varchar(255) NOT NULL,
  ReturnedValue varchar(255) NULL)
INSERT INTO #test 
SELECT 'col1', 1
UNION ALL
SELECT 'test', 'test'
DROP TABLE #test

UPDATETEXT

SQL Server 2005 no admite el uso de punteros de texto en instrucciones UPDATETEXT que leen y escriben los mismos objetos binarios grandes (BLOB) mediante el mismo puntero de texto. Copie los BLOB en una tabla temporal o en una variable de tabla, y vuelva a asignarle el valor a la columna original.

Palabra clave WITH cuando se usan sugerencias de tabla

En SQL Server 2005, con algunas excepciones, las sugerencias de tabla sólo se admiten en la cláusula FROM de una consulta cuando se especifican con la palabra clave WITH.

Para obtener más información, vea FROM (Transact-SQL) y Sugerencias de tabla (Transact-SQL).

ORDER BY en una definición de vista

En SQL Server 2005, la cláusula ORDER BY sólo se utiliza en una definición de vista para determinar las filas devueltas por la cláusula TOP. Esta cláusula no garantiza resultados ordenados cuando se consulte la vista, a menos que también se especifique ORDER BY en la misma consulta.

UPDATE con sugerencias de bloqueo

En SQL Server 2000, no se comprueban las sugerencias de bloqueo por si hay conflictos en una instrucción UPDATE cuando se dan estas dos condiciones:

  • La tabla de la cláusula FROM tiene un alias.
  • Se hace referencia a la misma tabla como un destino de la instrucción UPDATE sin un alias.

SQL Server pasa por alto las sugerencias de bloqueo que se proporcionan en la cláusula FROM y no emite ningún error si las sugerencias crean un conflicto. En SQL Server 2005, se devuelve un error cuando las sugerencias de bloqueo crean un conflicto en estas condiciones.

XML

Característica Descripción

OPENXML

Debido a los cambios en MSXML, OPENXML ya no admite predicados posicionales no enteros. En SQL Server 2005, MSXML 3.0 es el motor subyacente que se utiliza para procesar expresiones XPath usadas en consultas OPENXML. MSXML 3.0 tiene un motor que se ajusta mejor a XPath 1.0, en el que ha cambiado la semántica de valores no enteros en predicados posicionales.

Por ejemplo, la siguiente expresión XPath a[5.1] no devolverá ahora ningún elemento en lugar del quinto elemento <a>. Para cambiar esto, use directamente el valor redondeado. Por ejemplo, modifique el ejemplo anterior por a[5].

Expresiones XPath de OPENXML

MSXML 3.0 tiene un motor XPath 1.0 más estricto en el que se ha quitado la compatibilidad con las siguientes funciones:

  • format-number()
  • formatNumber()
  • current()
  • element-available()
  • function-available()
  • system-property()

En el caso de format-number() y formatNumber(), puede utilizar Transact-SQL. Para las demás funciones no compatibles, no existen soluciones directas.

Tipo 'xml' definido por el usuario

En SQL Server 2005, xml es un tipo de sistema reservado. Utilice sp_rename para cambiar el nombre del tipo antes o después de la actualización y modificar la aplicación para que funcione con el nombre de tipo nuevo.

Vea también

Referencia

Cambios de comportamiento en las características del motor de base de datos en SQL Server 2005
Características obsoletas del motor de base de datos de SQL Server 2005
Funcionalidad del motor de base de datos no incluida en SQL Server 2005

Otros recursos

Compatibilidad con versiones anteriores del Motor de base de datos de SQL Server 2005
sp_dbcmptlevel (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

17 de noviembre de 2008

Contenido nuevo:
  • Se agregó una entrada en la sección Características sobre la coincidencia de la intercalación de columnas en las variables de tabla.

14 de abril de 2006

Contenido nuevo:
  • Se agregó una entrada en la sección Transact-SQL acerca del uso de ORDER BY en una definición de vista.
  • Se ha agregado una entrada en la sección Transact-SQL acerca del uso de sugerencias de bloqueo con UPDATE.