1

我有一个正在开发的 SSIS 包。我正在尝试将数据从 SQL Server 2005 写入 MS Access 2007。

我很困惑如何将 SQL char(1) 字段转换为 Access Yes/No 字段。

根据我收集的信息,Access Yes/No 字段的 SQL 等效项将是一个位字段,其值为 0 或 1。

我的 SQL char(1) 字段(这是我的源字段)包含“N”或“Y”。我没有使用位字段的选项,因此我进退两难。我曾尝试转换为布尔值和整数,但没有任何成功。

在我的数据流任务中,我尝试创建正则表达式无济于事,派生列、数据转换等也无济于事。我被困住了。

我已经看到了一些关于构建循环遍历 .Row 集合的条件语句的示例。这似乎有点过分,必须为 NULL 检查或字符串值编写条件。

在 MSDN 链接SSIS Equivalent to DTS Transform Data Task Properties ...它有一些类似于此的代码:

If DTSSource("Col010") = "Y" Then
  DTSDestination("X") =  -1
 Else
  DTSDestination("X") =  0
End If

我应该能够通过代码直接操作行值吗?由于源字段是 Yes/No 类型,它是否接受整数值?负值?是的实际上是 MS 访问中的“-1”,我想这让我感到困惑。

似乎正则表达式可以解决这个问题,但我也不确定如何使用它。

有什么我忽略的吗?必须有一种方法可以将“CHAR”转换为“YES/NO”。

** 我知道在这里很容易指出,好的 ol' 2000 SQL DTS 可以毫无问题地处理这个问题,默认情况下,开箱即用,由猴子安装。我发现自己在 SSIS 的非常小的怪癖上花费了太多时间,例如这个是/否字段问题。

我找不到关于 SSIS 和 MS Access Yes/No 字段的任何文档。MSDN 也不允许我发布问题。我知道,可怜的我:(

有没有人遇到过 SSIS 和 MS Access 的这个怪癖?

4

2 回答 2

1

有关派生列转换的信息,请参阅MSDN 上的此主题

它没有具体说明您要做什么,但一些示例暗示您应该能够实现您的目标。将派生输出列的类型设置为 DT_BOOL 并使用上面代码的单行版本作为表达式(可能使用三元运算符?)。

是的,Access Jet 将 True 表示为 -1。假 = 0,真不假。如果将按位 Not 应用于 0,则会得到 -1 的二进制补码版本。

更新:布尔值的 Jet 内部存储一个整数(看图——但这就是他们选择的......)。因此,Jet Yes/No 字段接受零 (0) 表示 False,非零(不仅仅是 -1)表示 True。看评论

于 2009-06-18T00:00:26.513 回答
0

为了解决这个问题,我创建了一个派生列。

该列的正则表达式为:

[column] == "Y" ? -1 : 0

数据类型是:

single-byte signed integer [DT_I1]

和中提琴!Jet(又名 MS Access,感谢 David W. Fenton!),现在显示我的 Yes/No 字段。

在注意到表中只出现一条记录后,我注意到我的测试数据无效并纠正了根本问题。

这是关于如何将 SQL char(1) 字段(带有“N”或“Y”值)转换为 MS Access(oooops,我的意思是 Jet)Yes/No 字段的很好的文档。

谢谢大家的帮助。Stackoverflow 是无价的。

于 2009-06-19T18:52:31.360 回答