我正在开发一个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相当于DTS转换数据任务属性 ......它有一些与此类似的代码:

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

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

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

我有什么东西可以忽略吗?必须有一种方法来转换“CHAR”。到“是/否”。

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

我无法找到有关SSIS和MS Access是/否字段主题的任何文档。 MSDN也不允许我发布问题。我知道,可怜的我:(

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

有帮助吗?

解决方案

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

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

是的, Access Jet代表True为-1。 False = 0,True不是False。如果按位0应用Not,则得到-1的二进制补码版本。

更新:布尔的Jet内部存储为整数(去图 - 但这就是他们选择的......)。因此,Jet Yes / No字段对于False接受零(0)而对于True接受非零(不仅仅是-1)。 参见评论

其他提示

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

该列的正则表达式为:

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

数据类型为:

single-byte signed integer [DT_I1]

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

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

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

感谢大家的帮助。 Stackoverflow非常宝贵。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top