我正在开发一个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”。
**我知道很容易在这里指出,好的'2000 SQL DTS可以毫无问题地处理这个问题,默认情况下,开箱即用,由猴子安装。我发现自己花了太多时间在SSIS的非常小的怪癖上,例如这个是/否现场问题。
我无法找到有关SSIS和MS Access是/否字段主题的任何文档。 MSDN也不允许我发布问题。我知道,可怜的我:(
有没有人遇到过SSIS和MS Access的这个怪癖?
答案 0 :(得分:1)
有关派生列转换的信息,请参阅MSDN上的 this topic 。
它没有具体说明你要做的事情,但有些例子暗示你应该能够实现你的目标。将派生输出列的类型设置为DT_BOOL,并使用上面的代码的一行版本作为表达式(可能使用三元运算符?)。
是的, Access Jet代表True为-1。 False = 0,True不是False。如果按位0应用Not,则得到-1的二进制补码版本。
更新:布尔的Jet内部存储为整数(去图 - 但这就是他们选择的......)。因此,Jet Yes / No字段对于False接受零(0)而对于True接受非零(不仅仅是-1)。 参见评论
答案 1 :(得分:0)
为了解决这个问题,我创建了一个派生列。
该列的正则表达式为:
[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非常宝贵。