SSIS SQL преобразование символов в MS Access Да / Нет поле

StackOverflow https://stackoverflow.com/questions/1009444

  •  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 неоценим.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top