SSIS 2008 Executar parâmetro de saída SQL mapeamento datetime2 problema
-
22-08-2019 - |
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
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.