Acessando dados externos

Para acessar dados de uma fonte de dados OLE DB, você deve fornecer as seguintes informações ao SQL Server:

  • O nome do provedor OLE DB que expõe a fonte de dados.

  • Qualquer informação que o provedor OLE DB deve ter para localizar a fonte dos dados.

  • O nome de um objeto que a fonte de dados pode expor como um conjunto de linhas ou uma consulta que pode ser enviada ao provedor OLE DB que fará com que a fonte de dados exponha um conjunto de linhas. Os objetos que podem ser expostos como conjuntos de linhas são conhecidos como tabelas remotas. As consultas que geram conjuntos de linhas são conhecidas como consultas passagem.

  • Opcionalmente, você pode fornecer IDs de logon válidos para a fonte de dados OLE DB ao SQL Server.

O SQL Server oferece suporte a fontes de dados OLE DB heterogêneas em instruções Transact-SQL usando o nome do servidor vinculado ou o nome do computador ad hoc.

Nomes de servidor vinculado

Um servidor vinculado é um servidor virtual que foi definido como SQL Server com todas as informações necessárias para acessar uma fonte de dados OLE DB. Um nome de servidor vinculado é definido usando o procedimento armazenado do sistema sp_addlinkedserver. A definição do servidor vinculado contém todas as informações necessárias para localizar a fonte de dados OLE DB. Os logons locais do SQL Server são mapeados para logons no servidor vinculado usando sp_addlinkedsrvlogin.

Tabelas remotas podem ser referidas usando o nome do servidor vinculado como um dos seguintes:

  • O nome do servidor em uma tabela de nomes de quatro partes ou referência de exibição em uma instrução Transact-SQL. As outras três partes do nome fazem referência a um objeto no servidor vinculado que é exposto como um conjunto de linhas.

  • Um parâmetro de entrada para uma função OPENQUERY. A OPENQUERY envia um comando a ser executado ao provedor OLE DB. Em seguida, o conjunto de linhas retornado pode ser usado como uma referência de tabela ou de exibição em uma instrução Transact-SQL.

Para obter mais informações, consulte Identificando uma fonte de dados usando um nome de servidor vinculado.

Nomes ad hoc

Um nome ad hoc é usado para consultas pouco freqüentes em relação a fontes de dados OLE DB que não são definidas como servidores vinculados. No SQL Server, as funções OPENROWSET e OPENDATASOURCE fornecem informações de conexão para acessar dados das fontes de dados OLE DB.

Por padrão, não há suporte para nomes ad hoc. A opção do provedor DisallowAdhocAccess deve ser definida como 0 e a opção de configuração avançada Consultas Distribuídas Ad Hoc deve estar habilitada.

Observação sobre segurançaObservação sobre segurança

A habilitação do uso de nomes ad hoc indica que qualquer logon autenticado para o SQL Server pode acessar o provedor. Os administradores SQL Server devem habilitar esse recurso apenas para provedores altamente confiáveis que podem ser acessados por qualquer logon local com segurança.

OPENROWSET e OPENDATASOURCE devem ser usados apenas para fazer referência a fontes de dados OLE DB que são acessadas com pouca freqüência. Para qualquer fonte de dados que será acessada muitas vezes, defina um servidor vinculado. Nem o OPENDATASOURCE nem o OPENROWSET fornecem toda a funcionalidade de definições de servidor vinculado. Isso inclui gerenciamento de segurança e a capacidade de consultar informações do catálogo. Toda vez que essas funções são chamadas, todas as informações de conexão, incluindo senhas, devem ser fornecidas.

OPENROWSET e OPENDATASOURCE parecem ser funções e para conveniência são referidas como funções. No entanto, OPENROWSET e OPENDATASOURCE são macros e não oferecem suporte ao fornecimento de variáveis Transact-SQL como argumentos.

OPENROWSET pode ser usado com qualquer provedor OLE DB que retorna um conjunto de linhas e pode ser usado em qualquer lugar em que uma referência de tabela ou de exibição é usada em uma instrução Transact-SQL. OPENROWSET é especificado com o seguinte:

  • Todas as informações necessárias para conexão à fonte de dados OLE DB.

  • O nome de um objeto que gerará um conjunto de linhas ou uma consulta que gerará um conjunto de linhas.

OPENDATASOURCE fornece informações de conexão como parte de um nome de objeto de quatro partes. Essa função oferece suporte apenas a provedores OLE DB que expõem vários conjuntos de linhas usando a notação de catalog**.schema.**object. OPENDATASOURCE pode ser usado nos mesmos locais na sintaxe Transact-SQL em que um nome de servidor vinculado pode ser usado. OPENDATASOURCE é especificado com o seguinte:

  • O nome registrado como o PROGID do provedor OLE DB que é usado para acessar a fonte de dados.

  • Uma cadeia de conexão que especifica as várias propriedades de conexão a ser passadas ao provedor OLE DB. A sintaxe da cadeia de conexão é uma seqüência de pares de palavra-chave e valor. A sintaxe básica é definida no Software Development Kit do Microsoft Data Access e cada provedor documenta os pares específicos de palavra-chave e valor para os quais oferece suporte. Para obter mais informações sobre cadeias de conexão, consulte OPENDATASOURCE (Transact-SQL).

Para obter mais informações, consulte Identificando uma fonte de dados usando um nome ad hoc.

Acessando servidores vinculados

Depois que um servidor vinculado é criado usando sp_addlinkedserver, o servidor pode ser acessado usando o seguinte:

  • Consultas distribuídas que acessam tabelas no servidor vinculado por meio das instruções SELECT, INSERT, UPDATE e DELETE usando um nome baseado em servidor vinculado.

  • Procedimentos armazenados remotos executados em relação ao servidor vinculado usando um nome de quatro partes.

  • Uma instrução EXECUTE que usa um comando passagem parametrizado arbitrário usando a extensão AT linked_server_name. Esse comando inclui instruções DDL (linguagem de definição de dados) e DML (linguagem de manipulação de dados) ou comandos que retornam mais que um resultado. Para obter mais informações, consulte Usando consultas de passagem como tabelas.

O sp_addserver é mantido como um recurso de compatibilidade para aplicativos existentes, mas esse procedimento armazenado não terá suporte em futuras versões. Como os aplicativos são transportados para o SQL Server 2008, esses aplicativos podem precisar ser executados por um tempo com algum novo código que usa consultas distribuídas em relação a uma definição de servidor vinculado e algum código herdado que usa uma definição de servidor remoto. Os servidores vinculados e os servidores remotos usam o mesmo namespace. Portanto a definição do servidor vinculado ou do servidor remoto deve usar um nome que diferencie do nome da rede do servidor que está sendo acessado remotamente. Defina uma das entradas com um nome de servidor diferente e use sp_setnetname para associar essa definição ao nome da rede do servidor remoto.