Cambios de comportamiento en las características del motor de base de datos en SQL Server 2005

Actualizado: 17 de julio de 2006

En este tema se describen los cambios de comportamiento de algunas características del Database Engine (Motor de base de datos) en Microsoft SQL Server 2005 con respecto al comportamiento en versiones anteriores de SQL Server.

Copia de seguridad y recuperación

Cuando se restaura una base de datos existente, SQL Server 2005 requiere la realización de una copia de seguridad del final del registro antes de restaurar la base de datos en los modelos de recuperación completa o por medio de registros de operaciones masivas. Si se intenta restaurar una base de datos sin crear una copia de seguridad del final del registro se generará un error, a menos que la instrucción RESTORE contenga la cláusula WITH REPLACE o WITH STOPAT. Para obtener más información, vea Copias de seguridad de registros después del error.

Cursores

En la siguiente tabla se presenta una lista de las conversiones de cursor implícitas que se producen en SQL Server 2000, pero no en SQL Server 2005. La solución es solicitar el tipo específico de cursor, en lugar de depender de la conversión implícita.

Condición En SQL Server 2000, el cursor se convierte de A

La consulta contiene una función con valores de tabla en línea.

Dinámico/conjunto de claves

Estático

La consulta hace referencia a un objeto remoto.

Avance rápido

Conjunto de claves

La consulta no contiene tablas.

Avance rápido

Estático

La consulta contiene una función de tabla.

Avance rápido

Estático

La consulta contiene una tabla derivada.

Avance rápido

Estático

La consulta contiene una función de tabla con múltiples instrucciones.

Dinámico

Conjunto de claves

Conjunto de claves a estático

Estático

La consulta contiene una tabla virtual.

Dinámico/conjunto de claves

Estático

La consulta contiene una vista con TOP.

Avance rápido

Estático

La consulta contiene vistas con particiones actualizables.

Avance rápido

Estático

La consulta de cursor de la API contiene una vista indizada con una ruta de acceso exclusiva, pero no en el nivel de tabla base.

Conjunto de claves

Estático

La consulta de cursor de la API contiene una tabla sin índice agrupado ni clave única.

Conjunto de claves

Estático

El conjunto de resultados del cursor de la API contiene una columna text, ntext o image.

Avance rápido

Dinámico

SQL Server 2005 no admite la generación asincrónica de cursores Transact-SQL controlados por conjunto de claves o estáticos. Las operaciones de cursor de Transact-SQL, como OPEN o FETCH, se realizan normalmente por lotes, no es necesaria la generación asincrónica de cursores Transact-SQL. SQL Server 2005 mantiene la compatibilidad con los cursores de servidor API controlados por conjunto de claves o estáticos, donde OPEN de latencia baja representa un problema debido a los ciclos de ida y vuelta del cliente en cada operación de cursor.

En SQL Server 2005, cuando se declara un cursor dinámico en una tabla sin índices únicos y se elimina una fila fuera del cursor, una actualización posterior del cursor recupera un marcador de posición de la fila con datos NULL. En versiones anteriores de SQL Server, el cursor no devuelve la fila afectada.

En SQL Server 2005, si son posibles diferentes declaraciones de cursor a través de lógica condicional en un lote o procedimiento almacenado, las instrucciones INSERT, UPDATE y DELETE que se ejecutan mediante el cursor harán que se realice una nueva compilación. En SQL Server 2000, estas instrucciones no hacen que se realice de nuevo la compilación.

En el siguiente ejemplo, la instrucción UPDATE hará que se realice de nuevo la compilación del módulo.

IF(@some_condition=1)
   DECLARE c CURSOR FOR 
      SELECT region FROM db.dbo.mytable ORDER BY lastname
ELSE
   DECLARE c CURSOR FOR 
      SELECT postalcode FROM db.dbo.mytable ORDER BY firstname
...
FETCH NEXT FROM c
...
UPDATE db.dbo.mytable 
   SET  firstname='a' WHERE CURRENT OF c

Para evitar que se realice de nuevo la compilación, vuelva a escribir el código de la siguiente manera:

IF (@some_condition=1)
BEGIN
   DECLARE c CURSOR FOR 
     SELECT region FROM db.dbo.mytable ORDER BY lastname
   FETCH NEXT FROM c
   UPDATE db.dbo.mytable 
     SET  firstname='a' WHERE CURRENT OF c
END
ELSE
BEGIN
  DECLARE c CURSOR FOR 
    SELECT postalcode FROM db.dbo.mytable ORDER BY firstname
  FETCH NEXT FROM c
  UPDATE db.dbo.mytable 
    SET  firstname='a' WHERE CURRENT OF c
END

En SQL Server 2005, los bloqueos de desplazamiento de cursor adquieren una actualización de bloque de S (Shared) a U (Update), a menos que se especifique en la consulta una sugerencia de bloqueo superior. SQL Server 2000 agrega de forma transparente una sugerencia de bloqueo U a los cursores con bloqueo de desplazamiento. El comportamiento de SQL Server 2005 permite una mejor simultaneidad, pero abre la posibilidad de que se produzcan interbloqueos (mensaje 1205) en los cursores simultáneos. Use la sugerencia UPDLOCK para conseguir el comportamiento que desea. Para obtener más información, vea Sugerencias de tabla (Transact-SQL).

En SQL Server 2000, cuando se actualiza un valor de columna o fila que aparece más de una vez en un búfer de lectura de cursor, es posible que las otras repeticiones no reflejen la actualización debido al tamaño del búfer de lectura o a la posición de las filas en el búfer. En SQL Server 2005, las filas del búfer de lectura se actualizan de modo que los valores sean siempre coherentes, independientemente del tamaño del búfer de lectura o la posición de las filas.

En SQL Server 2000, los cursores que implican una instrucción UNION ALL de forma incorrecta, devuelven información sobre la capacidad de actualización basada en el primer conjunto de la UNION. Por lo tanto, algunos cursores aparecen como actualizables cuando no lo son. SQL Server 2005 muestra los resultados UNION ALL como calculados y, por lo tanto, no actualizables. Si todas las filas de cursor provienen de una sola tabla o vista, puede definir un cursor actualizable cambiando la consulta para utilizar las cláusulas IN u OR, en lugar de UNION.

En SQL Server 2000, cuando la opción CURSOR_CLOSE_ON_COMMIT se establece en ON, todos los cursores de una conexión se cerrarán cuando la transacción se haya confirmado. En SQL Server 2005, sólo se cerrarán los cursores que estén abiertos en la transacción actual, en el momento de la confirmación de la transacción. Los cursores que estén abiertos antes de empezar la transacción permanecerán abiertos.

SQL Server 2000 permite algunas declaraciones de cursor que no son válidas y las convierte en otros tipos de cursores. SQL Server 2005 no permite declaraciones que no son válidas. Por ejemplo, un cursor que solicita posibilidades de actualización y de no distinguir mayúsculas de minúsculas no es válido en SQL Server 2005 y genera un mensaje de error.

Bases de datos, archivos de datos y archivos de registro

Comportamiento de SQL Server 2000 Comportamiento de SQL Server 2005

La opción AUTO_CLOSE de una base de datos es un proceso sincrónico que puede reducir el rendimiento si tiene acceso a la base de datos una aplicación que establece e interrumpe repetidamente la conexión al Database Engine (Motor de base de datos).

El proceso AUTO_CLOSE es asincrónico. La continua apertura y cierre de la base de datos no afecta ya al rendimiento.

Los archivos de las particiones sin formato no aumentan automáticamente; por tanto, los parámetros MAXSIZE y FILEGROWTH no son necesarios cuando os_file_name especifica una partición sin formato.

Los archivos de las particiones sin formato pueden aumentar automáticamente. Se pueden especificar los parámetros MAXSIZE y FILEGROWTH.

Los permisos no se establecen en los archivos de datos y de registro de cada base de datos.

Los permisos se establecen en los archivos de datos y de registro siempre que se apliquen las siguientes operaciones a la base de datos:

CreadaModificada para agregar un nuevo archivo
AdjuntadaCopia de seguridad
SeparadaRestaurada

Los permisos evitan que los archivos se modifiquen por accidente si residen en un directorio sin restricción de permisos. Para obtener más información, vea Proteger archivos de datos y de registro.

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

Microsoft SQL Server 2005 Express Edition no establece permisos en archivos de datos y de registro.

Servidores vinculados y consultas distribuidas

Un servidor vinculado que se ha definido con 'SQLOLEDB' como nombre de proveedor, se modificará a SQLNCLI' (Proveedor OLE DB de SQL Native Client) en la actualización. La vista de compatibilidad sys.sysservers muestra los servidores vinculados que usan 'SQLNCLI' como 'SQLOLEDB'. La vista de catálogo sys.sysservers de SQL Server 2005 muestra los servidores vinculados que usan 'SQLNCLI' como 'SQLNCLI'.

No se admiten las consultas heterogéneas ni el uso de proveedores OLE DB cuando SQL Server se ejecuta en modo de fibra. El modo de fibra se habilita cuando la opción de configuración avanzada lightweight pooling se establece en 1.

No se puede crear una instancia del proveedor OLE DB de SQL Native Client fuera de proceso.

Los mensajes de advertencia de un servidor vinculado en SQL Server 2005 no se propagan al cliente. A continuación se indican las clases más importantes de estas advertencias:

  • Advertencias con compatibilidad ANSI sobre la eliminación de los valores NULL en un cálculo agregado
  • Advertencias de desbordamiento aritmético

Por ejemplo, la siguiente instrucción Transact-SQL puede generar un mensaje de advertencia si hay valores NULL en col1:

SELECT SUM(col1)
FROM <Table>
GROUP BY col2 

En SQL Server 2000 y versiones anteriores, los servidores vinculados propagan el mensaje de advertencia al cliente. En SQL Server 2005, no sucede así.

En SQL Server 2000, cuando un procedimiento almacenado remoto no se ejecuta correctamente debido a errores en tiempo de compilación (por ejemplo, un enlace de parámetros incorrecto), el estado/valor devuelto se establece en 0. Cuando este escenario se produce en SQL Server 2005, el valor o estado devuelto se establece en NULL.

Arquitectura del procesador de consultas

El uso de los valores de parámetros en la nueva compilación es diferente en SQL Server 2000 y SQL Server 2005 para los lotes que se suministran de las siguientes formas:

  • Procedimientos almacenados
  • Mediante sp_executesql
  • Instrucciones preparadas

Cuando SQL Server 2000 vuelve a compilar estos lotes, usa los valores de parámetros con los que se llaman a los lotes como parte de la nueva compilación. Cuando SQL Server 2005 vuelve a compilar estas consultas, usa los valores de parámetros tal como existen justo antes de la instrucción que lleva a cabo la nueva compilación. Esos valores pueden diferir de los que se pasaron originalmente en el lote. Para obtener más información, vea Parámetros y reutilización de un plan de ejecución.

Seguridad

Característica Comportamiento de SQL Server 2000 Comportamiento de SQL Server 2005

GRANT ALL

Concede todos los permisos aplicables.

Ya no se utiliza la concesión del permiso ALL en objetos e instrucciones. Cuando se ejecuta GRANT ALL, se produce lo siguiente:

  • El comando se ejecuta, pero sólo se conceden los permisos que se pueden conceder al usuario en SQL Server 2000.
  • Recibe el siguiente mensaje: "El permiso ALL es obsoleto y sólo se mantiene con fines de compatibilidad. NO implica los permisos ALL definidos en la entidad".

SQL Server 2005 proporciona permisos adicionales en diversos ámbitos que se pueden utilizar para administrar permisos de usuario. Por ejemplo, el permiso CONTROL se puede utilizar para conceder permisos de propiedad sobre un objeto.

Comparaciones de contraseñas

SQL Server 2000 conserva dos versiones de cada contraseña de inicio de sesión de SQL Server. Una es la contraseña real proporcionada por el usuario y la otra es la contraseña convertida por SQL Server a letras mayúsculas. Esto permite la validación de las contraseñas sin distinguir entre mayúsculas y minúsculas. Aunque este comportamiento es cómodo para muchos usuarios, hace más fáciles los ataques por averiguación de contraseñas ya que reduce el número de contraseñas posibles.

Sólo se almacena la contraseña real. La contraseña escrita por un usuario debe coincidir con la contraseña almacenada en el servidor. Si una contraseña no coincide con la contraseña almacenada en SQL Server, no se realizará el inicio de sesión. Si olvida el uso preciso de mayúsculas y minúsculas en los caracteres de la contraseña, deberá restablecerla.

Cambiar el idioma predeterminado de la cuenta sa

El idioma predeterminado de la cuenta SQL Server sa es el idioma seleccionado durante la instalación o actualización.

En versiones anteriores de Microsoft SQL Server, al ejecutar sp_configure para cambiar el idioma predeterminado también se actualiza el idioma predeterminado de la cuenta sa.

Para cambiar el idioma predeterminado de la cuenta sa en SQL Server 2005, debe ejecutar el procedimiento almacenado sp_defaultlanguage, ejecutar el comando DBCC FREESYSTEMCACHE y, a continuación, iniciar una nueva sesión. Con la ejecución de sp_configure para cambiar el idioma predeterminado del servidor no se actualiza el idioma predeterminado de la cuenta sa.

Procedimientos almacenados del sistema

En la siguiente tabla se muestran los cambios en los parámetros de procedimientos almacenados del sistema del Database Engine (Motor de base de datos).

Procedimiento almacenado Parámetro Descripción del cambio

sp_bindefault

@objname

El tamaño ha cambiado de nvarchar(517) a nvarchar(776).

sp_bindrule

@objname

El tamaño ha cambiado de nvarchar(517) a nvarchar(776).

sp_changeobjectowner

@objname

El tamaño ha cambiado de nvarchar(517) a nvarchar(776).

sp_detach_db

@keepfulltextindexfile

El tamaño ha cambiado de nvarchar(517) a nvarchar(776).

sp_fulltext_service

@action

El tamaño ha cambiado de varchar(20) a nvarchar(100).

sp_fulltext_service

@value

El tipo de datos ha cambiado de int a sql_variant.

sp_getapplock

@DbPrincipal

Parámetro agregado.

sp_releaseapplock

@DbPrincipal

Parámetro agregado.

sp_setapprole

@fCreateCookie

Parámetro agregado.

sp_setapprole

@cookie

Parámetro agregado.

sp_settriggerorder

@stmttype

El tamaño ha cambiado de varchar(10) a varchar(50).

sp_settriggerorder

@namespace

Parámetro agregado.

sp_sproc_columns

@fUsePattern

Parámetro agregado.

sp_stored_procedures

@fUsePattern

Parámetro agregado.

sp_table_privileges

@fUsePattern

Parámetro agregado.

sp_table_privileges_ex

@fUsePattern

Parámetro agregado.

sp_tables

@fUsePattern

Parámetro agregado.

sp_tables_ex

@fUsePattern

Parámetro agregado.

Tablas y vistas del sistema

En la siguiente tabla se describen los cambios en las columnas de las tablas y vistas del sistema.

Tabla o vista del sistema Columna Descripción del cambio

COLUMNS

ORDINAL_POSITION

El tipo de datos ha cambiado de smallint a int.

PARAMETERS

ORDINAL_POSITION

El tipo de datos ha cambiado de smallint a int.

REFERENTIAL_CONSTRAINTS

MATCH_OPTION

El tamaño ha cambiado de varchar(4) a varchar(7).

El valor predeterminado ha cambiado de 'NONE' a 'SIMPLE'.

REFERENTIAL_CONSTRAINTS

UPDATE_RULE

El tamaño ha cambiado de varchar(9) a varchar(11).

REFERENTIAL_CONSTRAINTS

DELETE_RULE

El tamaño ha cambiado de varchar(9) a varchar(11).

ROUTINE_COLUMNS

ORDINAL_POSITION

El tipo de datos ha cambiado de smallint a int.

sysaltfiles

name

El tipo de datos ha cambiado de nchar(128) a sysname.

sysaltfiles

filename

El tipo de datos ha cambiado de nchar(260) a nvarchar(260).

sysconfigures

config

El tipo de datos ha cambiado de smallint a int.

syscursorcolumns

data_type_sql

El tipo de datos ha cambiado de smallint a int.

sysfiles

name

El tipo de datos ha cambiado de nchar(128) a sysname.

sysfiles

filename

El tipo de datos ha cambiado de nchar(260) a nvarchar(260).

sysmessages

severity

El tipo de datos ha cambiado de smallint a tinyint.

sysperfinfo

cntr_value

El tipo de datos ha cambiado de int a bigint.

sysprocesses

waittime

El tipo de datos ha cambiado de int a bigint.

sysprocesses

hostprocess

El tamaño ha cambiado de nchar(8) a nchar(10).

sysprocesses

request_id

Columna agregada.

sysprotects

columns

El tamaño ha cambiado de varbinary(4000) a varbinary(8000).

sysservers

srvcollation

El tipo de datos ha cambiado de int a sysname.

sysservers

nonsqlsub

Columna agregada.

sysoledbusers

rmtpassword

Sólo devuelve NULL.

sysindexes

keys

Sólo devuelve NULL.

sysindexes

statblob

Sólo devuelve NULL.

syscomments

compressed

Sólo devuelve 0.

sysdevices

size

Sólo devuelve 0.

sysobjects

schema_ver

Sólo devuelve 0.

sysremotelogins

status

Sólo devuelve 0.

sysservers

topologyx

Sólo devuelve 0.

sysservers

topologyy

Sólo devuelve 0.

Transact-SQL

Característica Comportamiento de SQL Server 2000 Comportamiento de SQL Server 2005

Utilidad bcp

Un usuario que tiene permisos INSERT y SELECT en una tabla puede usar la utilidad bcp para la carga masiva de datos en dicha tabla utilizando el siguiente comando:

bcp <target table> in 
<datafile> -c -T

De manera predeterminada, este comando deshabilita las restricciones CHECK y los desencadenadores en las tablas de destino.

Para ejecutar la utilidad bcp, un usuario debe tener permiso ALTER y permisos INSERT y SELECT en las tablas de destino si las restricciones CHECK y los desencadenadores se han deshabilitado durante el proceso de copia masiva. Después de actualizar a SQL Server 2005, los comandos de bcp de las aplicaciones pueden producir errores por no tener suficientes permisos. Este problema se puede controlar de uno de los siguientes modos:

  • Conceda el permiso ALTER TABLE al usuario en todas las tablas que se vean afectadas por el proceso bcp.
  • Modifique el comando bcp para exigir explícitamente las restricciones CHECK y los desencadenadores, tal como se muestra en el siguiente comando:

    bcp <target table> 
    in <datafile> -c -T -h 
    "CHECK_CONSTRAINTS, 
    FIRE_TRIGGERS"

Funciones del sistema integradas

Cada referencia a funciones integradas, como NEWID y RAND, produce un resultado diferente, ya que se evalúa una vez por cada referencia de consulta externa.

Una consulta externa puede hacer varias referencias a columnas de vistas o tablas derivadas. Sin embargo, si estas columnas se han definido mediante la llamada a funciones como NEWID y RAND, estas referencias múltiples hacen que la función se evalúe sólo una vez por cada llamada real dentro de la vista o tabla derivada.

Las referencias múltiples a estas columnas de una subconsulta no conllevan que las funciones se evalúen varias veces. Esto le permite volver a utilizar el valor producido por estas funciones en la subconsulta.

Por ejemplo, en SQL Server 2000, la siguiente consulta devuelve dos valores diferentes. En SQL Server 2005, devuelve un valor único.

SELECT Column1, Column1
      FROM (
            SELECT RAND() Column1
            FROM (
            SELECT 1 c
            UNION
            SELECT 2 c
                  ) s
            ) t

BULK INSERT

BULK INSERT admite la conversión de tipo de cadena a decimal para las cadenas que representan valores numéricos que utilizan notación científica.

Las conversiones de tipo de cadena a decimal que se usan en BULK INSERT siguen las mismas reglas que la función CONVERT de Transact-SQL. Esta función rechaza las cadenas que representan valores numéricos que usan notación científica. Por lo tanto, BULK INSERT trata estas cadenas como valores que no son válidos y muestra errores de conversión. Para obtener más información, vea BULK INSERT (Transact-SQL).

Conversiones datetime

Las conversiones de cadena a datetime se marcan como deterministas. Sin embargo, esto no se aplica a los estilos descritos en la siguiente tabla. Con estos estilos, las conversiones dependen de la configuración de idioma.

En la siguiente tabla se muestran los estilos para los que la conversión de cadena a datetime es no determinista.

Todos los estilos por debajo de 1001106
107109
113130

1 Con la excepción de los estilos 20 y 21

SQL Server 2005 marca las conversiones de string a datetime como no deterministas.

DBCC CHECKFILEGROUP

Si se asocia un índice sin agrupar del grupo de archivos especificado con una tabla de otro grupo de archivos, se comprueban el índice y la tabla base del otro grupo de archivos.

Si se asocia un índice sin agrupar del grupo de archivos especificado con una tabla de otro grupo de archivos, no se comprueba el índice porque la tabla base no está disponible para validación.

DBCC SHOW_STATISTICS

El conjunto de filas devuelto por DBCC SHOW_STATISTICS no contiene una columna Name.

El primer conjunto de filas devuelto por DBCC SHOW_STATISTICS contiene una columna adicional denominada Name. Esta columna aparece como la primera columna del conjunto de resultados. Si tiene aplicaciones que tienen acceso a las columnas devueltas por DBCC SHOW_STATISTICS a través de su posición ordinal, modifíquelas para tener acceso a las columnas a través del nombre.

DROP LOGIN

Cuando se ejecuta DROP LOGIN, el inicio de sesión no se interrumpe si los usuarios de la base de datos se han asignado al inicio de sesión.

Cuando se ejecuta DROP LOGIN, el inicio de sesión se interrumpe incluso si los usuarios de la base de datos se han asignado al inicio de sesión.

Expresiones de columnas calculadas, restricciones CHECK y restricciones DEFAULT

El texto original de una expresión, incluidos los espacios en blanco, se conserva en los metadatos del catálogo. Por ejemplo, una expresión de columna calculada escrita como c1 + c2 + 1 aparecerá exactamente tal y como se ha escrito en la columna text de la tabla del sistema syscomments.

El texto original de una expresión se descodifica y normaliza y el resultado de esta operación se almacena en los metadatos del catálogo. La semántica de la expresión descodificada equivaldrá al texto original; sin embargo, no hay garantías de sintaxis. Por ejemplo, una expresión de columna calculada escrita como c1 + c2 + 1 se mostrará como (([c1]+[c2])+(1)) en la columna de definición de la vista de catálogo del sistema sys.computed_columns.

Expresiones en consultas

Las expresiones no seguras en las consultas no siempre generan una excepción.

En algunos casos, SQL Server 2005 evalúa las expresiones de las consultas antes en comparación con SQL Server 2000. Este comportamiento ofrece algunas ventajas importantes:

  • Capacidad de hacer coincidir los índices de las columnas calculadas con las expresiones de una consulta que son iguales que la expresión de la columna calculada.
  • Imposibilidad de un cálculo redundante de los resultados de la expresión.

Sin embargo, dependiendo de la naturaleza de la consulta y de los datos de la base de datos, pueden producirse excepciones en tiempo de ejecución en SQL Server 2005 si la consulta incluye una expresión existente no segura. Entre estas excepciones en tiempo de ejecución se incluyen:

  • Excepciones aritméticas: división por cero, desbordamiento y subdesbordamiento.
  • Errores de conversión, como la pérdida de precisión y el intento de convertir una cadena no numérica en un número.
  • Agregación sobre un conjunto de valores donde no está garantizado que todos sean distintos de NULL.

Es posible que estas mismas excepciones no se produzcan en SQL Server 2000 en una aplicación específica con datos específicos. Sin embargo, un plan de consulta que se cambie debido a cambios de estadística podría producir una excepción en SQL Server 2000. Estas excepciones en tiempo de ejecución se pueden evitar modificando la consulta para que incluya expresiones condicionales como NULLIF o CASE. Para obtener más información, vea Solucionar errores y advertencias en las expresiones de consultas.

fn_servershareddrives

Los miembros de la función public pueden ver los datos devueltos por la función del sistema fn_servershareddrives.

Cambio de permiso: fn_servershareddrives exige que el usuario tenga el permiso VIEW SERVER STATE en el servidor.

ms143359.note(es-es,SQL.90).gifImportante:

Esta función del sistema de SQL Server 2000 se incluye por compatibilidad con versiones anteriores. Se recomienda utilizar sys.dm_io_cluster_shared_drives en su lugar.

fn_virtualfilestats

Los miembros de la función public pueden ver los datos devueltos por la función del sistema fn_virtualfilestats.

Cambio de permiso: fn_virtualfilestats exige que el usuario tenga el permiso VIEW SERVER STATE en el servidor.

fn_virtualservernodes

Los miembros de la función public pueden ver los datos devueltos por la función del sistema fn_virtualservernodes.

Cambio de permiso: fn_virtualservernodes exige que el usuario tenga el permiso VIEW SERVER STATE en el servidor.

ms143359.note(es-es,SQL.90).gifImportante:

Esta función del sistema de SQL Server 2000 se incluye por compatibilidad con versiones anteriores. Se recomienda utilizar sys.dm_os_cluster_nodes en su lugar.

HOST_ID

HOST_ID devuelve un valor char(8).

HOST_ID devuelve un valor char(10).

Índices

Se admiten los índices que se describen en la columna "Comportamiento de SQL Server 2005".

Los siguientes índices pueden deshabilitarse durante el proceso de actualización o pueden requerir regeneración debido a los cambios especificados en SQL Server 2005:

  • Los índices en columnas calculadas que utilizan CHECKSUM (some_timestamp_column) estarán deshabilitados porque ha cambiado el comportamiento de la función CHECKSUM de Transact-SQL cuando toma una columna timestamp como argumento.
  • Los índices que contienen los valores de carácter 0x3390, 0x33ca o 0x33cb en columnas nvarchar o nchar que utilizan una intercalación basada en turco pueden requerir regeneración porque el comportamiento de ordenación de estas intercalaciones ha cambiado.
  • Los índices en vistas o columnas calculadas en las que la expresión de vista o de columna calculada contenga una conversión implícita de cadena a datetime o smalldatetime, o una conversión explícita no determinista de cadena a datetime o smalldatetime, estarán deshabilitados.

En los índices que requieran regeneración debido a los cambios descritos en los dos primeros elementos anteriores, utilice el siguiente procedimiento.

  1. Examine el registro de errores de SQL Server y busque los mensajes de advertencia 3801, 3803 ó 3804.

  2. Ejecute DBCC CHECKTABLE en la tabla subyacente para comprobar si hay algún problema.

  3. Si los resultados de la instrucción DBCC indican que existe un problema, vuelva a generar el índice mediante uno de los siguientes métodos:

    • Instrucción ALTER INDEX con la cláusula REBUILD
    • CREATE INDEX con la cláusula DROP_EXISTING
    • DBCC DBREINDEX
  4. Identifique las restricciones FOREIGN KEY deshabilitadas utilizando la siguiente instrucción:

    SELECT * FROM sys.foreign_keys 
    WHERE is_disabled=1;
    
  5. Habilite las restricciones FOREIGN KEY utilizando la instrucción ALTER TABLE CHECK CONSTRAINT.
    Las restricciones PRIMARY KEY y UNIQUE se habilitan cuando se regenera el índice asociado. Este índice debe volver a generarse para poder habilitar las restricciones FOREIGN KEY que hacen referencia a la restricción PRIMARY KEY o UNIQUE.

En los índices deshabilitados debido a los cambios descritos en el tercer elemento anterior, utilice el siguiente procedimiento.

  1. Identifique los índices en columnas calculadas que se hayan deshabilitado utilizando la siguiente instrucción:

    SELECT object_name(i.object_id) AS
     object_name, i.*
    FROM sys.indexes AS i
    JOIN sys.index_columns AS ic 
    ON i.index_id = ic.index_id 
      AND i.object_id = ic.object_id
    JOIN sys.computed_columns AS
     cc
    ON ic.object_id = cc.object_id 
      AND ic.column_id = cc.column_id
    WHERE i.is_disabled = 1
    
  2. En un índice de columna calculada, elimine el índice y, a continuación, cambie la definición de columna calculada para que utilice una función CONVERT explícita con un estilo de fecha determinista.

  3. En una vista indizada, elimine la vista y, a continuación, vuelva a definirla utilizando una función CONVERT explícita con un estilo de fecha determinista.

  4. Vuelva a crear el índice en la vista o columna calculada modificada.

Índices

Se admiten operaciones de índice en paralelo en las ediciones SQL Server 2000 Developer, SQL Server 2000 Standard y SQL Server 2000 Enterprise.

Las operaciones de índice en paralelo que crean, eliminan o vuelven a generar índices sólo están disponibles en las ediciones SQL Server 2005 Developer y SQL Server 2005 Enterprise.

Los usuarios que actualicen de la edición SQL Server 2000 Standard a la edición SQL Server 2005 Standard deben saber que las operaciones que crean, eliminan o vuelven a generar índices se ejecutan en serie en la edición SQL Server 2005 Standard y pueden tardar más tiempo en finalizar.

Esto no afecta a las instrucciones SELECT, INSERT, UPDATE y DELETE. Éstas funcionarán en paralelo en SQL Server 2005 Standard Edition.

Después de actualizar a la edición SQL Server 2005 Standard, supervise las operaciones que crean, eliminan y vuelven a generar índices. Puede que tenga que ajustar las secuencias de comandos de mantenimiento o las actividades de mantenimiento planeadas para que puedan llevarse a cabo en un tiempo mayor.

Para ejecutar operaciones de índice en paralelo, instale SQL Server 2005 Enterprise Edition.

Cláusula ORDER BY

Los nombres de columna de la cláusula ORDER BY se resuelven en columnas que aparecen en la lista de selección, independientemente de si están calificados.

Por ejemplo, la siguiente consulta se ejecuta sin errores:

USE pubs
SELECT au_fname AS 'FName',
  au_lname AS 'LName'
FROM authors a
ORDER BY a.LName

SQL Server omite el calificador a de la cláusula ORDER BY y resuelve el nombre de columna LName en la lista de selección.

Los nombres y los alias de columna calificados se resuelven en las columnas de tablas que aparecen en la cláusula FROM. Si el parámetro order_by_expression no está calificado, debe ser único entre todas las columnas que aparecen en la instrucción SELECT.

Por ejemplo, la siguiente consulta equivalente genera un error:

USE AdventureWorks
SELECT FirstName AS 'FName',
    LastName AS 'LName'
FROM Person.Contact p
ORDER BY p.LName

SQL Server no omite el calificador p de la cláusula ORDER BY y resuelve el nombre de columna LName en la lista de la cláusula FROM. Sin embargo, la cláusula FROM no reconoce que esa columna LName es un alias de columna de la tabla p.

Función SERVERPROPERTY

El tipo de valor devuelto de la propiedad ProductVersion de la función SERVERPROPERTY es varchar.

El tipo de valor devuelto de la propiedad ProductVersion de la función SERVERPROPERTY es nvarchar.

sp_addtype

Cualquier usuario puede ejecutar sp_addtype.

Para ejecutar sp_addtype, los usuarios deben ser miembros de la función de base de datos db_ddladmin o db_owner.

Para permitir a los usuarios que creen tipos de datos de alias, debe producirse uno de los siguientes cambios:

  • Para utilizar sp_addtype, agregue los usuarios a la función de base de datos db_ddladmin o db_owner.
  • Para crear un tipo de datos de alias utilizando CREATE TYPE, conceda el permiso CREATE TYPE a los usuarios y el permiso ALTER a los usuarios del esquema de destino.

sp_altermessage

Se puede utilizar sp_altermessage para especificar si un mensaje de sistema (un mensaje con Id. de mensaje < 50000) se va a escribir o no en el registro de aplicación de Windows.

No se puede usar sp_altermessage para cambiar el comportamiento de registro de los mensajes de sistema (mensajes con Id. de mensaje < 50000). Para auditar los mensajes de sistema, use Traza de SQL y User Error Message (clase de evento). Para obtener más información, vea Introducción a Traza de SQL.

sp_changedbowner

Sólo los miembros de la función fija de servidor sysadmin o de la función fija de base de datos db_owner, o un miembro de las funciones fijas de base de datos db_ddladmin y db_securityadmin pueden ejecutar sp_changeobjectowner.

A un usuario que ejecute este procedimiento almacenado mediante su pertenencia a las funciones fijas de base de datos db_ddladmin y db_securityadmin también se le debe conceder el permiso CONTROL en el elemento que se pueda proteger. La ejecución de sp_changeobjectowner sin el permiso CONTROL en el objeto de destino provocará que no se lleve a cabo la ejecución y que aparezca el siguiente mensaje de error:

"Mensaje 15247, nivel 16, estado 1, procedimiento sp_changeobjectowner, línea 17

No tiene permiso para realizar esta acción".

sp_help

sp_help devuelve un conjunto de resultados de funciones.

sp_help devuelve dos conjuntos de resultados de funciones. El conjunto de resultados adicional es de parámetros de funciones.

sysindexes

 

Se incluye sys.sysindexes por compatibilidad con versiones anteriores. No obstante, los cambios en SQL Server 2005 impiden que la vista sea completamente compatible con versiones anteriores de SQL Server.

Metadatos de sistema

Los miembros de la función public pueden consultar las tablas del sistema y mostrar metadatos del catálogo.

Los usuarios que consultan una vista de catálogo sólo pueden ver las filas de metadatos de los objetos de los que son propietarios o sobre los que tienen algún permiso, o que tienen el privilegio de ver por ser miembros de una función. Para obtener más información, vea Configuración de visibilidad de los metadatos y Solucionar problemas de visibilidad de los metadatos.

Tablas del sistema

Las tablas del sistema tienen un tipo 'S'.

Las tablas del sistema están disponibles como vistas de compatibilidad y tienen un tipo 'V'. Las instrucciones que consulten las tablas del sistema e incluyan el tipo de criterios de búsqueda = 'S' producirán errores.

Modifique los criterios de búsqueda de instrucciones al tipo = 'V'.

O bien

Migre a las nuevas vistas de catálogo o a las vistas de administración dinámica. Para obtener más información, vea Asignar tablas del sistema de SQL Server 2000 a vistas del sistema de SQL Server 2005.

TABLOCK cuando se realice la importación masiva empleando bcp, BULK INSERT o bien, OPENROWSET(BULK...)

Para la importación masiva en una tabla con un índice agrupado que no esté vacío, se omite la sugerencia TABLOCK.

Para la importación masiva en una tabla con un índice agrupado que no esté vacío, la sugerencia TABLOCK adquiere un bloqueo X en la tabla. Este comportamiento impide la importación masiva de datos en paralelo. Si desea realizar una importación masiva en paralelo en este caso, no utilice TABLOCK. Para obtener más información acerca de la carga masiva en paralelo, vea Directrices para optimizar la importación masiva.

Desencadenadores

La repetición directa de desencadenadores sólo se produce cuando se activa un desencadenador y realiza una acción que provoca que el mismo desencadenador se vuelva a activar.

La repetición directa de desencadenadores se produce en cualquiera de las siguientes circunstancias:

  • Un desencadenador se activa y realiza una acción que provoca que el mismo desencadenador se vuelva a activar.
  • El mismo desencadenador se llama de nuevo, pero después de que se llame un tipo diferente (AFTER o INSTEAD OF).

La repetición indirecta se produce cuando se activa un desencadenador y realiza una acción que provoca la activación de otro desencadenador del mismo tipo (AFTER o INSTEAD OF). Este segundo desencadenador realiza una acción que provoca una nueva activación del desencadenador original.

Para obtener más información, vea la sección Desencadenadores recursivos en Usar desencadenadores anidados.

Desencadenadores

Cuando una instrucción UPDATE o DELETE se emite en una vista con particiones, ya sea local o distribuida, se activa cualquier desencadenador UPDATE o DELETE definido en las tablas base de la vista. Éstos incluyen los desencadenadores de las tablas no afectadas por la operación de actualización o eliminación.

Cuando se emite una instrucción UPDATE o DELETE en una vista con particiones, sólo se activa un desencadenador UPDATE o DELETE si la tabla base en la que se define el desencadenador está afectada por la operación de actualización o eliminación. Para obtener más información, vea Ejecución de desencadenadores DML.

Función UPDATE()

La función UPDATE() no detecta cambios en las columnas timestamp. Para estas columnas, una cláusula IF UPDATE() en el cuerpo de un desencadenador devuelve FALSE, independientemente de si se actualizaron las columnas.

La función UPDATE() detecta cambios en las columnas timestamp. En estas columnas, una cláusula IF UPDATE() en el cuerpo de un desencadenador DML devuelve TRUE si las columnas se actualizaron.

Funciones definidas por el usuario

Las funciones definidas por el usuario no pueden incluir funciones del sistema integradas no deterministas.

Las funciones Transact-SQL definidas por el usuario pueden incluir la mayoría de funciones del sistema integradas no deterministas. Para obtener una lista completa de las funciones integradas que se admiten, vea Crear funciones definidas por el usuario (motor de base de datos).

Tipos de datos varchar, nvarchar y varbinary.

Una cadena de longitud cero o valor binario que se utiliza como la definición de una columna de tabla calculada crea una columna de tipo varchar(0), nvarchar(0) o varbinary(0).

Una cadena de longitud cero o valor binario que se utiliza como la definición de una columna de tabla calculada crea una columna de tipo varchar(1), nvarchar(1) o varbinary(1). Este cambio de comportamiento sólo afecta al tipo de datos de la columna calculada, pero no al valor calculado.

Modifique las aplicaciones que examinan la longitud de los datos de columna calculados para esperar una longitud mínima de 1 byte para las columnas varchar y varbinary, y de 2 bytes para las columnas nvarchar.

Acceso a tablas virtuales

Los usuarios invitados o los miembros de la función public pueden tener acceso a las tablas virtuales.

Se necesitan los permisos VIEW SERVER STATE y SELECT para tener acceso a una tabla virtualcomo, por ejemplo sysprocesses.

WITH CHECK OPTION en vistas

Se admiten las operaciones de inserción y actualización en vistas que especifican la cláusula WITH CHECK OPTION y que se crean sobre tablas remotas, incluso cuando aquellas operaciones quedaban fuera de los límites de la instrucción SELECT de la vista.

SQL Server 2005 reconoce la cláusula WITH CHECK OPTION cuando se realizan operaciones de inserción y actualización en vistas creadas sobre tablas de orígenes de datos remotos.

Si las operaciones de inserción y actualización no se pueden realizar en vistas creadas sobre tablas remotas debido a la cláusula WITH CHECK OPTION y no desea que esto ocurra, modifique la vista sin especificar la cláusula WITH CHECK OPTION.

Para obtener más información, vea CREATE VIEW (Transact-SQL), ALTER VIEW (Transact-SQL) y Modificar datos mediante una vista.

xp_cmdshell

Cuando se genera un error durante la ejecución de xp_cmdshell, aparecerá un mensaje de error, pero la ejecución no finalizará.

Cuando se genera un error durante la ejecución de xp_cmdshell, aparecerá un mensaje de error y la ejecución finalizará.

Vea también

Referencia

Cambios recientes en las características del Motor de base de datos de 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 julio de 2006

Contenido nuevo:
  • En la tabla que muestra los cambios de comportamiento de Transact-SQL, se ha agregado la entrada "Expresiones de columnas calculadas, restricciones CHECK y restricciones DEFAULT".
  • En la tabla que muestra los cambios de comportamiento de Transact-SQL, en la columna "Comportamiento de SQL Server 2005", se ha cambiado la instrucción de la entrada "Tipos de datos varchar, nvarchar y varbinary". Se ha cambiado el tipo de datos de una columna de tabla calculada de nvarchar(2) a nvarchar(1).

5 de diciembre de 2005

Contenido nuevo:
  • Se agregó información acerca de las declaraciones de cursor que no son válidas.
  • Se agregó el contenido de "Cambiar el idioma predeterminado de la cuenta sa".
  • Se agregó el contenido de "DBCC CHECKFILEGROUP".
  • Se agregó el contenido de "TABLOCK cuando se realice la importación masiva".
  • Se agregó el contenido de "Desencadenadores".
Contenido modificado:
  • Se corrigió el contenido de "Tipos de datos varchar, nvarchar y varbinary".