#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 приятно слышать. Если мой ответ помог вам, не стесняйтесь отмечать его как принятый. Это не обязательно делать, просто делает вещи более понятными для тех, кто может просмотреть этот вопрос в будущем.