Diretrizes para uso de consultas distribuídas

Desde que o provedor ofereça suporte às interfaces OLE DB necessárias, cada classe de instrução Transact-SQL mencionada neste tópico é permitida.

Instruções Transact-SQL

A lista a seguir relaciona os subconjuntos da linguagem Transact-SQL que são permitidos em tabelas remotas acessadas por meio de nomes baseados em servidor vinculado ou de nomes ad hoc:

  • Todas as consultas que têm o formulário padrão da cláusula SELECT select_list FROM e da cláusula WHERE são permitidas. A cláusula INTO new_table_name de SELECT não é permitida quando o new_table_name fizer referência a uma tabela remota.

  • Nas instruções SELECT, INSERT, UPDATE e DELETE, colunas em tabelas remotas não podem ser qualificadas com um nome de tabela de uma única ou de quatro partes. As tabelas remotas devem receber um alias na cláusula FROM e o nome do alias deve ser usado para qualificar o nome da coluna.

  • Tabelas que contêm colunas xml não podem ser consultadas, mesmo que a consulta acesse colunas não xml da tabela.

  • Quando uma coluna de objeto grande (LOB) de uma tabela remota é especificada como um item na select_list de uma instrução SELECT, a instrução SELECT não pode conter uma cláusula ORDER BY.

  • Os predicados IS NULL e IS NOT NULL não podem fazer referência a colunas de LOB em uma tabela remota.

  • GROUP BY ALL não é permitido em uma consulta distribuída quando a consulta também tem uma cláusula WHERE. GROUP BY sem especificar ALL tem suporte.

  • Instruções INSERT são permitidas em relação a tabelas remotas desde que o provedor atenda aos requisitos de OLE DB para instruções INSERT. Para obter mais informações, consulte Requisitos de INSERT para provedores OLE DB.

  • Constantes NULL não podem ser inseridas em uma coluna timestamp por meio de uma consulta distribuída.

  • $IDENTITY e $ROWGUIDCOL não têm suporte com consultas distribuídas. Valores explícitos não podem ser inseridos em colunas de identidade em tabelas remotas.

  • Instruções UPDATE e DELETE são permitidas em tabelas remotas se o provedor atender aos requisitos da interface OLE DB na tabela especificada. Para obter mais informações, consulte Requisitos de UPDATE e DELETE para provedores OLE DB.

  • Uma tabela remota pode ser atualizada ou excluída por meio de um cursor definido em uma consulta distribuída quando a tabela remota é especificada na instrução UPDATE ou DELETE (UPDATE ou DELETE remote_table WHERE CURRENT OF cursor_name) se o provedor atender às condições de atualização na tabela remota. Para obter mais informações, consulte Usando cursores com consultas distribuídas.

  • Não há suporte para instruções READTEXT, WRITETEXT e UPDATETEXT em tabelas remotas.

  • Colunas com tipos de dados de objetos grandes (como text, ntext ou image) não poderão ser referenciadas em operações de atualização ou inserção se o provedor for instanciado fora do processo do SQL Server, opção de provedor AllowInProcess is 0. Para obter mais informações, consulte Configurando provedores de OLE DB para consultas distribuídas.

  • Instruções de linguagem de definição de dados, como CREATE, ALTER ou DROP, não são permitidas em servidores vinculados.

  • Uma instrução EXECUTE pode enviar um comando de passagem a um servidor vinculado usando a palavra-chave AT. A capacidade de executar a instrução depende da configuração de RPC do servidor vinculado e da capacidade do servidor vinculado em honrar a execução de instrução.

  • Nenhuma outra operação ou instrução em nível de banco de dados é permitida em servidores vinculados.

Outras diretrizes

A seguir estão algumas diretrizes e restrições adicionais:

  • Cursores STATIC ou INSENSITIVE podem fazer referência a tabelas remotas. Cursores KEYSET poderão fazer referência a tabelas remotas, se o provedor OLE DB atender a determinados requisitos. Para obter mais informações sobre esses requisitos, consulte Requisitos de cursores controlados por conjunto de chaves para provedores OLE DB. Nenhum outro tipo de cursor pode fazer referência a uma tabela remota.

  • Procedimentos armazenados têm suporte apenas em fontes de dados do SQL Server.

  • Uma conexão deve ter as opções ANSI_NULLS e ANSI_WARNINGS definidas como ON para que a conexão possa executar consultas distribuídas. Para obter mais informações, consulte SET ANSI_DEFAULTS (Transact-SQL).

  • Para criar os melhores planos de consulta quando você estiver usando uma tabela em um servidor vinculado, o processador de consulta deverá ter estatísticas de distribuição de dados do servidor vinculado. Usuários que limitaram permissões em qualquer coluna da tabela podem não ter permissões suficientes para obter todas as estatísticas úteis e podem receber um plano de consulta menos eficiente e de baixo desempenho. Se o servidor vinculado for uma instância do SQL Server, para obter todas as estatísticas disponíveis, o usuário deverá ser proprietário da tabela ou membro da função de servidor fixa sysadmin, da função de banco de dados fixa db_owner ou da função de banco de dados fixa db_ddladmin no servidor vinculado.