Как сформулировать условное выражение на вкладке «Поток данных служб SSIS»? - PullRequest
2 голосов
/ 21 августа 2010

Я занимаюсь разработкой пакета служб SSIS 2008 и пытаюсь создать преобразование «Производный столбец». Но когда я иду в редактор выражений и пробую это выражение, оно вызывает у меня много ошибок. Я пробовал различные дифференциации этого, но все привели к ошибкам. Мне нужен один из вас, экспертов по SQL, чтобы указать лучшее выражение!

ISNULL (WITHDRAWAL_DATE) || TRIM (WITHDRAWAL_DATE) == "" NULL: CAST (WITHDRAWAL_DATE КАК DATETIME)

Поэтому я хочу, чтобы этот тип входных данных WITHDRAWAL_DATE сравнивался с пустой строкой - если она пустая, я хочу, чтобы она стала нулевой, иначе будет приведена как дата.

Спасибо, ребята, за вашу помощь. Я так растерялся! WITHDRAWAL_DATE - это входной тип данных DATE в исходном XML-файле, и теперь я использую его как тип данных STRING в моем XSD-файле. В конечном итоге проблема заключается в том, что некоторые поля Withdrawal_Date в моих исходных данных XML пусты. Поэтому я хочу вставить нулевые значения в мою базу данных для этих записей.

Какой тип данных мне нужно указать в моей выходной таблице XSD, XLST и SQL? И для меня не имеет значения, использую ли я задачу преобразования данных или производную колонку Xform, но, поскольку я новичок в этом, не могли бы вы выслать мне синтаксис выражения?

@ BobS: когда я работал с вашим обновленным решением, я получил ошибку: Преобразование типа данных datetime2 в тип данных datetime привело к значению вне диапазона

Так что, когда я гуглил тип данных datetime2, похоже, что это новый тип данных, который поддерживает большие поля времени / даты. Поэтому я изменил свою таблицу SQL, чтобы использовать вместо этого DATETIME2 для этого поля, и изменил приведенное ниже выражение приведения, чтобы использовать DATETIME2, но затем выходные данные преобразования не изменились соответствующим образом.
Я также попытался изменить WITHDRAWAL_DATE на datetime для всех файлов, а затем изменить таблицу SQL, указав NOT NULL для этого поля. Но это также дало мне ошибки.

Ответы [ 2 ]

3 голосов
/ 21 августа 2010

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

Во-первых, вы не можете изменить тип данных столбца, что и пытается сделать ваше выражение.Я не уверен, что вы на самом деле пытаетесь это сделать.Но если ваш выходной столбец совпадает с входным столбцом, вам придется его изменить.Для этого в редакторе «Производный столбец» имя производного столбца должно быть новым именем столбца, а «Производный столбец» должен быть <add as new column>

. Выражение требует двух изменений.Чтобы присвоить значение NULL, вы используете нулевую функцию с синтаксисом NULL(data-type).И синтаксис функции CAST - (DT_datatype)columnname.Итак, вот как должно выглядеть ваше выражение

ISNULL(WITHDRAWAL_DATE) || TRIM(WITHDRAWAL_DATE) == "" ? NULL(DT_DBTIMESTAMP) : (DT_DBTIMESTAMP)WITHDRAWAL_DATE

ОБНОВЛЕНИЕ: вы должны быть в состоянии использовать выражение выше;но я изменил его на тип данных DT_DBTIMESTAMP.Тип данных SSIS DT_DBTIMESTAMP соответствует типу данных DATETIME SQL Server.

Чтобы узнать, какой тип данных следует использовать для исходного компонента, вы можете щелкнуть правой кнопкой мыши по исходному компоненту и выбрать «Показать расширенный редактор».... Выберите вкладку входов и выходов.Перейдите в древовидном представлении, чтобы найти столбец и просмотреть связанный тип данных.Расширенный редактор доступен для большинства (возможно, всех) компонентов потока данных.

ОБНОВЛЕНИЕ 2: ЕСЛИ тип вывода для компонента «Производный столбец» - DT_DBTIMESTAMP2 вместо DT_DBTIMESTAMP, убедитесь, что вы изменили обе ссылки DT_DBTIMESTAMP в своем выражении.Перед закрытием компонента «Производный столбец» просмотрите выражение для столбца «Тип данных».Вы не можете изменить его, но он покажет тип данных, которым будет являться вывод выражения.Если это не то, что вам нужно, значит, в вашем выражении все еще есть проблема.

Для исходных файлов нельзя изменить тип данных внешних столбцов.По крайней мере, я не смог этого сделать.В SSIS вы должны работать с тем, что интерпретируется компонентом Source.Если вы можете изменить файлы, чтобы изменить тип данных, то отлично.Затем используйте компонент Derived Column для преобразования того, что дает, в то, что вам нужно.

0 голосов
/ 22 августа 2010

Какие ошибки вы получаете? Я подозреваю, что один из них - ошибка приведения.

...