Instrucciones para utilizar consultas distribuidas

Siempre que el proveedor admita las interfaces OLE DB necesarias, se permitirán todas las clases de instrucciones Transact-SQL mencionadas en este tema.

Instrucciones Transact-SQL

A continuación se ofrece una lista de los subconjuntos del lenguaje Transact-SQL que se permiten en las tablas remotas a las que se tiene acceso a través de nombres basados en un servidor vinculado o nombres "ad hoc":

  • Se admiten todas las consultas con el formato estándar SELECT select_list FROM cláusula WHERE cláusula. La cláusula INTO new_table_name de SELECT no se permite cuando new_table_name hace referencia a una tabla remota.

  • En las instrucciones SELECT, INSERT, UPDATE y DELETE, no es posible calificar columnas en tablas remotas con un nombre de tabla de una sola parte o de cuatro partes. Las tablas remotas deben ser sustituidas por un alias en la cláusula FROM, y se debe utilizar el alias para calificar el nombre de columna.

  • No se pueden consultar tablas que incluyen columnas xml, aunque la consulta pueda tener acceso a las columnas de la tabla que no son xml.

  • Cuando se especifica una columna de objeto grande (LOB) de una tabla remota como un elemento de select_list en una instrucción SELECT, la instrucción SELECT no puede contener una cláusula ORDER BY.

  • Los predicados IS NULL e IS NOT NULL no pueden hacer referencia a las columnas LOB de una tabla remota.

  • No se admite GROUP BY ALL en una consulta distribuida si la consulta tiene también una cláusula WHERE. Se admite GROUP BY sin especificar ALL.

  • Se permite la ejecución de instrucciones INSERT en tablas remotas siempre que el proveedor cumpla los requisitos de OLE DB para las instrucciones INSERT. Para obtener más información, vea Requisitos de INSERT para los proveedores OLE DB.

  • No se pueden insertar constantes NULL en una columna timestamp a través de una consulta distribuida.

  • $IDENTITY y $ROWGUIDCOL no se admiten con las consultas distribuidas. No se pueden insertar valores explícitos en las columnas de identidad de las tablas remotas.

  • Se permite la ejecución de instrucciones UPDATE y DELETE en tablas remotas si el proveedor cumple los requisitos de la interfaz OLE DB en la tabla especificada. Para obtener más información, vea Requisitos de UPDATE y DELETE para los proveedores OLE DB.

  • Una tabla remota se puede actualizar o eliminar mediante el cursor definido en una consulta distribuida cuando la tabla remota se especifica en la instrucción UPDATE o DELETE (UPDATE o DELETE remote_table WHERE CURRENT OF cursor_name) si el proveedor cumple las condiciones de actualización de la tabla remota. Para obtener más información, vea Usar cursores con consultas distribuidas.

  • Las instrucciones READTEXT, WRITETEXT y UPDATETEXT no se admiten en tablas remotas.

  • No se puede hacer referencia a columnas que tienen tipos de datos de objetos grandes (como text, ntext o image) en operaciones de actualización o inserción si se crea una instancia del proveedor fuera del proceso de SQL Server (la opción del proveedor AllowInProcess es 0). Para obtener más información, vea Configurar proveedores OLE DB para consultas distribuidas.

  • No se permite la ejecución de instrucciones de lenguaje de definición de datos, como CREATE, ALTER y DROP, en servidores vinculados.

  • Una instrucción EXECUTE puede enviar un comando de paso a través a un servidor vinculado utilizando la palabra clave AT. La capacidad de ejecutar la instrucción depende de la configuración de RPC del servidor vinculado y la capacidad del servidor vinculado de admitir la ejecución de instrucciones.

  • No se permiten otras operaciones o instrucciones de bases de datos en servidores vinculados.

Otras directrices

A continuación se indican algunas restricciones y directrices adicionales:

  • Los cursores STATIC o INSENSITIVE pueden hacer referencia a tablas remotas. Los cursores KEYSET pueden hacer referencia a tablas remotas si el proveedor OLE DB cumple determinados requisitos. Para obtener más información acerca de estos requisitos, vea Requisitos de cursores dinámicos para proveedores OLE DB. Ningún otro tipo de cursor puede hacer referencia a una tabla remota.

  • Los procedimientos almacenados solo se admiten en orígenes de datos de SQL Server.

  • Una conexión debe tener las opciones ANSI_NULLS y ANSI_WARNINGS establecidas en ON para poder ejecutar consultas distribuidas. Para obtener más información, vea SET ANSI_DEFAULTS (Transact-SQL).

  • Para crear los mejores planes de consulta al usar una tabla en un servidor vinculado, el procesador de consultas debe tener estadísticas de la distribución de datos del servidor vinculado. Los usuarios con permisos limitados en las columnas de la tabla puede que no tengan permisos suficientes para obtener todas las estadísticas de utilidad, y puede que reciban un plan de consulta menos eficaz y experimenten un bajo rendimiento. Si el servidor vinculado es una instancia de SQL Server, para obtener todas las estadísticas disponibles, el usuario debe ser propietario de la tabla o ser miembro de la función fija de servidor sysadmin, de la función fija de base de datos db_owner o de la función fija de base de datos db_ddladmin en el servidor vinculado.