Назначение пользовательской переменной SSIS

#ssis

#ssis #SSIS

Вопрос:

Кто-нибудь знает, как назначить одну пользовательскую переменную другой в скрипте в SSIS?

У меня есть две пользовательские переменные, обе они имеют тип DateTime.

Я пытаюсь назначить одно другому в задаче скрипта и получаю ошибку недопустимого типа

 Dts.Variables["Query_AccountingDay"].Value = Dts.Variables["Override_AccountingDay"].Value;
  

Выдает мне ошибку:
Ошибка: Система.Размышление.TargetInvocationException: Исключение было вызвано целью вызова. —> Microsoft.SQLServer.Dts.Runtime.Исключение DtsRuntimeException: Тип значения, присваиваемого переменной «User::Query_AccountingDay», отличается от текущего типа переменной. Переменные не могут изменять тип во время выполнения. Типы переменных являются строгими, за исключением переменных типа Object.

Я попробовал кастинг, это не сработало.

Помогите, пожалуйста

Ответ №1:

Итак, вы пробовали?

 Dts.Variables["Query_AccountingDay"].Value = Convert.ToDateTime(Dts.Variables["Override_AccountingDay"].Value.ToString());
  

Если это не работает, не могли бы вы сделать быстрый снимок экрана окна переменных, чтобы мы могли проверить типы данных?

Мой выглядит так, переопределяющее значение — 2007-07-07, запрос — 2011-10-19

Окно переменных

Задача скрипта, настроенная таким образом Окно переменных задачи скрипта

Основная часть кода выглядит следующим образом

     public void Main()
    {
        MessageBox.Show(String.Format("{0}:{1}", "Override_AccountingDay", Dts.Variables["Override_AccountingDay"].Value));
        MessageBox.Show(String.Format("Before {0}:{1}", "Query_AccountingDay", Dts.Variables["Query_AccountingDay"].Value));

        Dts.Variables["Query_AccountingDay"].Value = Convert.ToDateTime(Dts.Variables["Override_AccountingDay"].Value.ToString());
        Dts.TaskResult = (int)ScriptResults.Success;

        MessageBox.Show(String.Format("After {0}:{1}", "Query_AccountingDay", Dts.Variables["Query_AccountingDay"].Value));
    }
  

Результаты выполнения через окна сообщений

 ---------------------------

---------------------------
Override_AccountingDay:7/7/2007 7:37:36 AM
---------------------------
OK   
---------------------------

---------------------------

---------------------------
Before Query_AccountingDay:10/19/2011 7:37:41 AM
---------------------------
OK   
---------------------------

---------------------------

---------------------------
After Query_AccountingDay:7/7/2007 7:37:36 AM
---------------------------
OK   
---------------------------
  

Комментарии:

1. Да, это исправлено. Я пытался выполнить приведение с помощью (DateTime), я также обнаружил небольшую ошибку в своем коде, которая также вызывала проблему. спасибо за этот хорошо написанный ответ!

Ответ №2:

Переменная Query_AccountingDay должна быть указана как переменная ReadWrite, а не как переменная только для чтения, как вы указали.

Надеюсь, это поможет

Нед

Комментарии:

1. Чтобы сделать это правдоподобным ответом через два года, вы действительно должны рассказать, почему это актуально, и показать, как это сделать.