Pergunta

Eu estou tentando usar uma tarefa Executar SQL no SSIS 2008 para mapear um parâmetro de saída procedimento de armazenamento para uma variável pacote.

A variável de pacote é SSIS tipo DateTime eo parâmetro de procedimento de armazenamento é SQL tipo DATETIME.

A instrução SQL é EXEC GetCurrentDate @CurrentDate=? e na tela de mapeamento de parâmetros, o parâmetro é mapeado para a variável de pacote com saída direção e tipo de dados DBTIMESTAMP especificado.

Quando eu executar o pacote eu recebo o seguinte erro:

[Execute SQL Task] Erro: Execução a consulta "EXEC GetCurrentDate @ CurrentDate =? "Falhou com o seguinte erro: "O tipo do valor que está sendo atribuído à variável "User :: CurrentDate" difere do Tipo de corrente variável. variáveis ??podem não alterar o tipo durante a execução. Os tipos de variáveis ??são rígidas, excepto variáveis ??de tipo de objeto. ". Possível motivos de falha: Problemas com o consulta, "ResultSet" propriedade não definida corretamente, parâmetros não definidos corretamente, ou não conexão estabelecida corretamente.

Se eu executar um rastreamento na consulta que está sendo executado vejo o tipo está sendo assumida como datetime2:

declare @p3 datetime2(7)
set @p3=NULL
exec sp_executesql N'EXEC GetCurrentDate @CurrentDate=@P1 ',N'@P1 datetime2(7) OUTPUT',@p3 output
select @p3

Alguém sabe por que ele está assumindo o tipo é datetime2?

Graças

Foi útil?

Solução

Encontrou a resposta em um relatório de bug Micorsoft Ligação:

Estamos fechando este caso como este é o comportamento esperado e é um resultado da nova mudança sql tipo datetime. Você está usando um gerenciador de conexões oledb nativa para a tarefa sql, no processo de interoperabilidade, usamos VARIANT para manter o valor e a única maneira de evitar a perda de dados é para armazenar o valor como variante BSTR. Se você alterar User :: dateParam ao tipo string que vai funcionar, ou você pode mudar para usar o gerenciador de conexão gerenciada para ignorar a interoperabilidade COM.

http://connect.microsoft.com/SQLServer/feedback /ViewFeedback.aspx?FeedbackID=307835

Outras dicas

Tente especificar os parâmetros inout / saída como DATE em vez de DBTIMESTAMP na tarefa SSIS.

Isso certamente funciona no SSIS 2005 pacotes em que já trabalhei.

Também vale a pena dar uma olhada no este link , que cobre este, bem como um par de outros problemas com SSIS e datas.

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