Data Access local via OPENQUERY

Esses dias, vi em um cliente meu uma abordagem interessante, la eles possuem N campanhas, cada campanha possui sua estrutura especifica, porem, existe um SELECT que é compartilhado por todas, então, o que meu cliente resolveu fazer: Criar uma procedure que receba o nome da campanha, e retorne o SELECT parametrizado.

Algo mais ou menos assim:

CREATE PROCEDURE dbo.RetornaValores
@Tabela VARCHAR(100)
AS
DECLARE @Script VARCHAR(8000)
SET @Script = 'SELECT * FROM '+@Tabela
EXECUTE (@Script)

Porem, ao tentar executar o SELECT via query:

SELECT * FROM OPENQUERY([ServerName],'EXECUTE [dbo].[RetornaValores] ''id''')

Foi gerado o seguinte erro:

Msg 7411, Level 16, State 1, Line 1
Server 'ServerName' is not configured for DATA ACCESS.

O por que do erro: Quando voce configura um linked server, existe uma opção chamada Data Access que por default ja vem habilitada no Linked Server, fazendo com que seja possivel acessar dados de outra instancia, porem neste caso, não estamos utilizando um linked server, apenas uma procedure, portanto, é necessario a execução da seguinte query para funcionar perfeitamente:

EXECUTE sp_serveroption 'ServerName', 'data access', TRUE;

Lembrando que o server name deve ser substituido pelo resultado da seguinte query:

SELECT name FROM SYS.SERVERS

Então, o mesmo SELECT de antes sera executado sem problemas.

Anúncios
Post a comment or leave a trackback: Trackback URL.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: