Como resolver o SQL query parâmetros de mapeamento de problemas ao usar o Oracle fornecedor de OLE DB?

StackOverflow https://stackoverflow.com/questions/58540

  •  09-06-2019
  •  | 
  •  

Pergunta

Ao tentar entrar em uma consulta SQL com parâmetros usando o Oracle fornecedor de OLE DB recebo o seguinte erro:

Os parâmetros não podem ser extraídos a partir de comandos de SQL.O provedor pode não ajudar a analisar informações de parâmetro do comando.Nesse caso, utilize o comando SQL a partir de variáveis" modo de acesso, em que todo comando SQL é armazenado em uma variável.
INFORMAÇÕES ADICIONAIS:
O provedor não pode derivar informações de parâmetro e SetParameterInfo não foi chamado.(Microsoft OLE DB Provider para Oracle)

Eu tentei seguir a sugestão aqui, mas não entendo muito bem o que é necessário:Consultas parametrizadas contra a Oracle

Qualquer idéias?

Foi útil?

Solução

Para expandir o link na pergunta:

  1. Criar uma variável de pacote
  2. Faça duplo clique no pacote de nome de variável.(Isso permite a você acessar as propriedades da variável)
  3. Defina a propriedade 'EvaluateAsExpression' para true
  4. Introduza a consulta no construtor de expressões.
  5. Definir a origem de OLE DB consulta para SQL Comando Variável

O construtor de expressões pode criar dinamicamente usando expressões variável para criar 'parametised consultas'.
Portanto, o seguinte 'normal' de consulta:

select * from book where book.BOOK_ID = ?

Pode ser escrito em o construtor de expressões como:

"select * from book where book.BOOK_ID = " + @[User::BookID]

Em seguida, você pode fazer null manipulação e conversão de dados usando o construtor de expressões.

Outras dicas

Se Você usar a Tarefa de Fluxo de Dados e usar o provedor OLE DB Source, e você precisa de parametrizar a sua Consulta :

  1. Criar uma Variável para guardar "Cheio" de instrução de Consulta :Clique com o direito na área em branco fora do pacote e Clique em Variáveis :

Variables

Clique em Adicionar Variáveis na Janela de Variáveis :

enter image description here

Fazer o nome é SQL_DTFLOW_FULL ou algo que se pode entender facilmente.O variable data type é STRING

  1. Crie Variável(s) para salvar a sua parâmetro(s).

eu.e, do total de Consulta stamements é :

SELECT * FROM BOOK WHERE BOOK_ID = @BookID --@BookID is SQL Parameter

no exemplo acima, eu tenho apenas um parâmetro :@BookID, então eu preciso criar uma variável para guardar o meu parâmetro.Adicionar mais variáveis depende de suas Consultas.

ParamAdd

Dê a ele o nome de SQL_DTFLOW_BOOKID

O variable data type é STRING

Então, você precisa de fazer o seu SSIS puro, e as variáveis é classificada em compreensível partes.

Tente fazer com que o nome da variável é SQL_{TASK NAME}_{VariableName}

  1. Faça Expressão para SQL_DTFLOW_FULL variável, clique no número 1, e começar a preencher com o número 2.Faça Suas Instruções SQL para ser uma correcta Instrução SQL usando a corda do bloco.Seqüência de bloco geralmente usando "aspas Duplas" no início e no final.Concat variáveis com a seqüência de bloco.

Expression

Clique em avaliar a Expressão, a mostrar resultado, certifique-se de que sua consulta é correto, copie-o e cole o resultado da Consulta no SSMS.

Certifique-se por si mesmo que as variáveis é livre de Injeção de SQL usando a sua própria lógica.(Use o desenvolvedor instinto)

  1. Abra a Tarefa de Fluxo de Dados, abra a Origem de OLE DB Editor através de um duplo clique no item.

Data Flow

  • Selecione o Modo de Acesso a Dados : SQL Command From Variable
  • Selecione o Nome da Variável : SQL_DTFLOW_FULL
  • Clique em Visualizar para se certificar de que ele funciona.

Que é tudo, a minha maneira de evitar esse SSIS caso de falha.Desde que eu uso dessa forma, eu nunca tive esse problema, você sabe, o SSIS algo está estranho.

Para alterar o valor da variável, defini-lo antes de Tarefa de Fluxo de Dados, o SQL Resultado de SQL_DTFLOW_FULL variável será alterada a cada alterar o valor da variável.

No meu caso o problema era que eu tinha comentários dentro do sql na forma normal de /* */ e eu também tive apelidos de coluna como "nome da Coluna" em vez de [Nome da Coluna].

Uma vez eu removido funciona.

Tente também tem o seu parâmetro ?instrução dentro da cláusula WHERE e não dentro da UNE, que foi parte do problema também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top