SSIS SQL преобразование символов в MS Access Да / Нет поле
-
06-07-2019 - |
Вопрос
У меня есть пакет служб SSIS, который я разрабатываю. Я пытаюсь записать данные из SQL Server 2005 в MS Access 2007.
Я довольно озадачен тем, как преобразовать поле SQL char (1) в поле Access Yes / No.
Исходя из собранной мной информации, SQL-эквивалент поля Access Yes / No будет битовым полем со значениями 0 или 1.
Поле моего SQL char (1) (которое является моим исходным полем), содержит " N " или "Y". У меня нет возможности использовать битовое поле, отсюда и моя дилемма. Я пробовал приводить к булевому и целому числам и не имел успеха.
В моей задаче потока данных я пытался создавать регулярные выражения безрезультатно, а производные столбцы, преобразования данных и т. д. безрезультатно. Я застрял.
Я видел несколько примеров построения условных операторов, которые перебирают коллекции .Row. Это кажется немного за борт, чтобы написать условия для проверки NULL или строковых значений. Р>
В ссылке MSDN "> Служба SSIS, эквивалентная свойствам задачи преобразования данных DTS ... имеет некоторый код, похожий на этот:
If DTSSource("Col010") = "Y" Then
DTSDestination("X") = -1
Else
DTSDestination("X") = 0
End If
Должен ли я иметь возможность манипулировать значениями строк напрямую, через код? Так как исходное поле имеет тип Да / Нет, оно принимает целочисленные значения? отрицательные значения? Да, это на самом деле "-1" в доступе MS, и я думаю, это сбивает меня с толку.
Кажется, регулярное выражение решило бы эту проблему, но я не уверен, как это использовать.
Есть ли что-то, что я пропускаю? Должен быть способ конвертировать "CHAR". на "ДА / НЕТ". Р>
** Я знаю, что здесь легко указать, что хороший SQL DTS 2000 года мог бы справиться с этим без каких-либо проблем, по умолчанию, прямо из коробки, установленной обезьяной. Я обнаружил, что трачу WAAAAY слишком много времени на очень маленькие причуды SSIS, такие как проблема «Да / Нет».
Я не могу найти какую-либо документацию по полям служб SSIS и MS Access Да / Нет. MSDN также не позволит мне задать вопрос. Я знаю, бедный я :(
Кто-нибудь когда-нибудь сталкивался с этой причудой с SSIS и MS Access?
Решение
См. эту тему в MSDN для получения информации о преобразовании производного столбца.
В нем конкретно не говорится о том, что вы пытаетесь сделать, но некоторые примеры подразумевают, что вы должны быть в состоянии достичь своей цели. Задайте для типа производного выходного столбца значение DT_BOOL и используйте в качестве выражения выражение, состоящее из одной строки, приведенной выше, (возможно, с троичным оператором?).
И да, Access Jet представляет True как -1. Ложь = 0, и Истина не Ложь. Если вы примените побитовое значение Not к 0, вы получите версию дополнения до двух -1.
Обновление . Внутреннее хранилище Jet для логического значения является целым числом (поймите, что они выбрали ...). Таким образом, поля Jet Yes / No принимают ноль (0) для False и ненулевое значение (не только -1) для True. См. комментарии
Другие советы
Чтобы решить эту проблему, я создал производную колонку. Р>
Регулярное выражение для столбца:
[column] == "Y" ? -1 : 0
Тип данных:
single-byte signed integer [DT_I1]
и альт! Jet (он же MS Access, спасибо Дэвид В. Фентон!) Теперь отображает мои поля Да / Нет.
Заметив, что в таблице отображается только одна запись, я заметил, что мои тестовые данные были недействительными, и исправил основную проблему.
Это хорошая документация о том, как преобразовывать поля SQL char (1) (со значениями "N" или "Y") в MS Access (ооо, я имел в виду Jet) поля Да / Нет.
Спасибо за помощь всем. Stackoverflow неоценим. Р>