Tenho usado o servidor vinculado com o provedor antigo (SQLNCLI) sem nenhum problema, conforme recomendado pela Microsoft , estou planejando mudar para o novo provedor (MSOLEDBSQL). Consigo adicionar servidor vinculado usando o seguinte T-SQL depois de instalar os drivers
EXEC sp_addlinkedserver
@server=N'SQL02\DEV1',
@srvproduct=N'',
@provider=N'MSOLEDBSQL',
@datasrc=N'SQL02,1933';
Infelizmente, recebendo o seguinte erro quando tento consultar um novo servidor vinculado:
Consultas que tentei:
--- example 1
select * from OPENQUERY ([SQL02\DEV1], 'select name from sys.databases');
--- example 2
select name from [SQL02\DEV1].master.sys.databases;
--- example 3 (without linked server dependency)
SELECT c.* FROM OPENROWSET(
'MSOLEDBSQL'
, 'Server=SQL02,1933;Database=master;Integrated Security=True;'
, 'SELECT name FROM sys.databases;'
) c;
Obtendo o mesmo erro de todos os exemplos:
O uso fora de processo do provedor OLE DB "MSOLEDBSQL" com SQL Server não é suportado.
Isso realmente significa que o SQL-2016 não é compatível com o uso do novo provedor MSOLEDBSQL, especialmente em servidores vinculados, ou há algo que eu perdi além de reinstalar drivers e reiniciar o SQL Server.
Parece que você fez tudo certo. No entanto, o link que você postou tem um comentário na página que afirma:
Se você abrir a guia de detalhes clicando no sinal + , você será recebido com as seguintes informações:
Isso levará você para https://learn.microsoft.com/en-gb/sql/connect/oledb/download-oledb-driver-for-sql-server?view=sql-server-ver15 (Apenas no caso do curto link torna-se obsoleto.)
Eu pegaria os drivers OLE DB mais recentes de lá.
Driver do Microsoft OLE DB para SQL Server
Tome seu tempo e leia as informações sobre as diferentes gerações de drivers OLE DB na página da web. Na subseção intitulada 3. Microsoft OLE DB Driver for SQL Server (MSOLEDBSQL) há esta pequena nota que afirma:
Com base no que você escreveu em sua pergunta, você deve estar usando o driver OLE DB correto. Bom....
Criar servidor vinculado do SQL Server 2019 para o SQL Server 2016
Eu tenho várias instâncias no meu laptop e criei um servidor vinculado da minha instância de 2019 para uma instância do SQL Server 2016 usando os seguintes procedimentos armazenados:
Em seguida, consultei o servidor vinculado com a seguinte declaração:
Que prontamente retornou:
Parece funcionar bem.
Criar servidor vinculado da instância do SQL Server 2016 (CI) para a instância do SQL Server 2016
Em seguida, criei um servidor vinculado da minha instância de 2016 que não diferencia maiúsculas de minúsculas para a mesma instância do SQL Server 2016 usando os seguintes procedimentos armazenados:
Em seguida, consultei o servidor vinculado em minha instância de CI com a seguinte declaração:
Que prontamente retornou:
Isso parece se correlacionar com o que você está observando... Hmmm. Vamos pensar sobre isso.
Causas Possíveis
Vamos dar uma olhada no...
Explorador de Ojbect | Objetos de servidor | Servidores Vinculados | Provedores | Propriedades MSOLEDBSQL
Abriremos as propriedades do driver na instância do SQL Server 2019 que usei primeiro:
...e as propriedades do driver no SQL Server 2016 CI que usei no meu segundo teste:
E aí temos que. A propriedade Permitir inprocesso na instância configurada do SQL Server 2016 CI não está marcada. A instância do SQL Server 2019 tem essa configuração marcada. Vamos alterá-lo para nossa instância do SQL Server 2016 e executar a consulta. Funciona!
Solução
Certifique-se de que a opção Permitir inprocess esteja marcada para o Microsoft OLE DB Driver for SQL Server em suas propriedades no Linked Server | Provedores .
O OLE DB foi descontinuado e lançado em 2018 como MSOLEDBSQL. As versões anteriores (e ainda obsoletas) são SQLOLEDB ou SQLNCLI.
Como você está usando o SQL Server 2016, seu servidor provavelmente não possui o MSOLEDBSQL instalado. Você terá que instalá-lo no servidor antes de poder usá-lo em um servidor vinculado.
Mais informações, incluindo um link para download, estão disponíveis nos documentos .