Условное выполнение в SSIS на основе предыдущего вывода задачи SQL

#sql-server #tsql #ssis #expression

#sql-сервер #tsql #ssis #выражение

Вопрос:

В настоящее время я разрабатываю процесс, который проверяет, была ли обновлена таблица, а затем добавляет их в автономную базу данных, из которой я в настоящее время работаю. О CDC или любой другой форме репликации не может быть и речи, поскольку я не системный администратор. У меня есть несколько контейнеров SSIS, которые я хочу запустить на основе вывода предыдущей задачи SQL и т.д. Я пытаюсь создать их в построителе выражений, и задача выводит его в переменную. Переменная заполняется, но тип не совпадает с типом построителя выражений. Я получаю следующую ошибку:

Не удается преобразовать значение выражения в тип свойства. Дополнительная информация: не удается преобразовать ‘System.Строка ‘ to ‘System.Логическое значение ‘

Я попытался преобразовать как в построителе выражений, так и в задаче SQL, но безуспешно.

Я уверен, что это легко исправить, но я еще не нашел ничего в Интернете, что помогло бы мне устранить эту проблему.

Любая помощь приветствуется.

Я преобразовал переменную в разные типы в задаче SQL, но это не сработало, и я также преобразовал ее в построителе выражений, но это дало совершенно другую ошибку о недопустимости приведения параметра.

Это запрос, который проверяет, существует ли таблица

 SELECT
    Case when count(*) > 0 then 1
        Else 0 end as cnt
FROM sys.databases WHERE [name] = 'Financial Information'
 

Если он существует, он выделил 1, еще 0 для cnt. Результирующий набор устанавливается в одну строку.

В построителе выражений я использую:

 @[User::cnt] = 1
 

Но это выдает ошибку:

Не удается преобразовать значение выражения в тип свойства. Дополнительная информация: не удается преобразовать ‘System.Строка ‘ to ‘System.Логическое значение ‘

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

1. Я предполагаю @[User::cnt] , что это тип string данных? Если задача Transact-SQL возвращает 1 или 0, то почему бы не использовать Boolean тип данных? Ошибка сообщает вам о проблеме здесь String и Boolean несовместима, и выражение like @[User::cnt] = 1 попытается неявно преобразовать значение @[User::cnt] (а SSIS принимает очень мало неявных преобразований).

2. Я попробую это завтра. Приветствую ввод.

Ответ №1:

Я предполагаю, что это выполняется в соответствии с ограничением приоритета после выполнения задачи SQL? Для выполнения сравнения, которое возвращает либо true, либо false = , необходимо использовать два. Из сообщения об ошибке, которое вы получаете, похоже @[User::cnt , что ] является строковой переменной. В приведенном ниже примере также выполняется сравнение с использованием переменной со строковым типом данных, однако, учитывая отправленный вами запрос, я бы предложил изменить его на тип данных int. Если @[User::cnt] значение is изменено на have иметь тип данных int , тогда двойные кавычки необходимо будет удалить из выражения.

введите описание изображения здесь

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

1. @noobMan приятно слышать. Если мой ответ помог вам, не стесняйтесь отмечать его как принятый. Это не обязательно делать, просто делает вещи более понятными для тех, кто может просмотреть этот вопрос в будущем.