Eu criei um pacote SSIS que roda a cada hora na minha máquina. A primeira parte do meu pacote executa uma tarefa Executar SQL e o conjunto de resultados (linha única, coluna única) é uma lista separada por vírgulas de IDs de registro exclusivos que foram atualizados na última hora. (ou seja, FJ1,FJ2,FJ3) Eu capturo esse resultado em uma variável e quando eu executo tarefas de script do usuário para exibir o valor dessa propriedade, ele aparece como deveria ser.
Eu passo esta variável para executar a tarefa SQL em diferentes servidores ODBC usando um procedimento armazenado
Minha instrução SQL é a seguinte
call DeleteRowsById(?)
E então atribuí minha variável (como SQL_Longvarchar) ao parâmetro 1 na seção de mapeamento de parâmetros. (ParameterSize é -1), mas não exclui os registros da tabela. (Eu executei o SP manualmente no Workbench e funcionou como esperado) Então tive uma ideia e como parte do meu SP comecei a fazer entradas em uma tabela Temp apenas para ver o que estava surgindo como variável. Inserir na tabela mostra apenas o primeiro caractere da variável e é por isso que não está excluindo nenhum registro.
Alguém pode me indicar a direção certa, pois não consigo descobrir por que minha variável está sendo truncada.
Eu sei que isso foi perguntado há algum tempo, mas talvez outra pessoa se depare com essa resposta e não gaste as várias horas em que tenho batido minha cabeça contra isso.
Acontece que você precisa usar o tipo SQL_WVARCHAR para variáveis.
A seguir está minha evidência, mostrando o funcionamento do SQL_WVARCHAR.
Comando OLEDB do SQL Profiler:
Comando ODBC do SQL Profiler usando SQL_VARCHAR
Comando ODBC do SQL Profiler usando SQL_CHAR
Comando ODBC do SQL Profiler usando SQL_WVARCHAR