Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

andrerm

OPENROWSET com parametros

Recommended Posts

To quebrando a cabeça a horas mas não consegui achar uma solução.

Preciso acessar informações de um o banco de dados que está em outra rede.

Acessar não é o problema, o problema é que preciso filtrar as informações antes de receber devido ao elevado número de registros.

 

Criei uma procedure no servidor onde estão as informações, fazendo toda a regra de negócio para que retorne somente o que preciso.

 

No servidor onde preciso receber as informações criei uma nova procedure com os parâmetros:

@VEICULOS VARCHAR(MAX)

@DATAINICIAL DATETIME,

@DATAFINAL DATETIME,

@ULTIMAPOSICAO BIT

 

Vi vários posts com o mesmo problema e trabalhei em duas sugestões

 

Sugestão 1

	EXEC( '	SELECT *
		FROM
		OPENROWSET (
			''SQLOLEDB'',
			''111.111.111.111'';''sa'';'''',
			''SET FMTONLY OFF
			EXEC dbXXX.dbo.PesquisarLogs ''' + @VEICULOS + ''', ''' + @DATAINICIAL + ''', ''' + @DATAFINAL + ''', ''' + @ULTIMAPOSICAO + ''')''')

 

Sugestão 2

	DECLARE @SQL VARCHAR(MAX)				
SET @SQL = 'SELECT *
			FROM OPENROWSET(
				''SQLOLEDB'',
				''111.111.111.111'';''sa'';'''',
				EXEC dbXXX.dbo.PesquisarLogs ''' + @VEICULOS + ''', ''' + CONVERT(VARCHAR, @DATAINICIAL) + ''', ''' + CONVERT(VARCHAR, @DATAFINAL) + ''','  + CONVERT(VARCHAR, @ULTIMAPOSICAO) + ')'		
EXEC(@SQL)

 

Em ambos os casos não obtive sucesso, os dois retornam erro.

 

Chamada da procedure

ProcedureX 'XXX9999,QQQ9999,ZZZ9999', '2011-03-17 14:00:00', '2011-03-18 14:00:00', 1

 

Erro sugestão 1:

Msg 102, Level 15, State 1, Line 7
Incorrect syntax near 'XXX9999'.

 

Erro sugestão 2:

Msg 156, Level 15, State 1, Line 5
Incorrect syntax near the keyword 'EXEC'.
Msg 102, Level 15, State 1, Line 5
Incorrect syntax near ')'.

 

 

Alguém tem outro caminho que posso seguir, ou sabe a solução dos erros informados ?

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

To quebrando a cabeça a horas mas não consegui achar uma solução.

Enqto esta quebrando somente a cabeça esta ótimo. Já vi pessoas quebrando o monitor :devil:

 

Brincadeiras a parte, executar procedure via linkedserver realmente não é tão simples, massssss

Qdo você executa somente o select :

SELECT *
           FROM
           OPENROWSET (
               ''SQLOLEDB'',
               ''111.111.111.111'';''sa'';'''',
               ''SET FMTONLY OFF
               EXEC dbXXX.dbo.PesquisarLogs ''' + @VEICULOS + ''', ''' + @DATAINICIAL + ''', ''' + @DATAFINAL + ''', ''' + @ULTIMAPOSICAO + ''')''

 

Os dados veem corretos ou gera erro?

 

Se não me engano, no seu exec, você tem que colocar também o seu linked:

exemplo:

 

EXEC LINKEDSERVER.dbXXX.dbo.PesquisarLogs ''' + @VEICULOS + ''', ''' + @DATAINICIAL + ''', ''' + @DATAFINAL + ''', ''' + @ULTIMAPOSICAO + '''

 

Tenta isso.

 

Qual sua versão do SQL?

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rs...

 

O problema que estou tendo é somente quando utilizo parametros para filtrar a pesquisa.

Quando faço um SELECT ou executo uma procedure sem parametros funciona.

Cheguei a ler em alguns foruns que não é possível utilizar paramentros em OPENROWSET, mas acho que se for verdade deve haver outra forma de acesso.

 

A versão do SQL que estou utilizando é 2005.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então,

 

eu tenho um ambiente em 2005 Standard, que executo uma proc desta forma:

 

EXEC LINKEDSERVER.DATABASE.OWNER.PROCEDUDE @user_name, @process

 

No meu caso, não tenho retorno negativo (erro), mas tive que me atentar a alguns serviços como o MSDTC ativo e o 'remote access' que tem que ser 1

sp_configure 'remote access', 1
RECONFIGURE WITH OVERRIDE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fechando o tópico.

 

Não consigo realizar o processo através do OPENROWSET e pelo que li parece não ser possível.

 

Fui utilizar o LINKEDSERVER conforme sugerido, mais ai o meu maravilhoso provedor "LOCAWEB" que a cada dia que passa fica pior, me informou que não tenho permissão, mesmo sendo um servidor dedicado.

 

Sendo assim resolvi acessar direto a outra base de dados e realizar as regras de negócio pela aplicação e não mais pela procedure, o processo ficou um pouco mais lento mas foi a única solução.

 

Obrigado a todos que enviaram dicas.

 

Valeu !!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

andrerm,

 

estranho, pois o erro gerado não é erro de acesso, mas erro de sintaxe, porém se achou uma medida paleativa e que te atendeu, ótimo. :huh:

 

Boa sorte.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.