SSIS将char转换为boolean/bit

16

我有一个 SSIS 包用于加载数据;如您所知,数据文件中有 Y/N char(1) 标志,当我尝试将它们作为位标志加载到 SQL Server 时。我将数据文件中的列指定为 String [DT_STR],并使用以下表达式进行数据转换以将它们转换为布尔值(即使一开始将它们指定为 DT_BOOL,我也收到了相同的转换错误,尽管 SSIS 要求我说明哪些值应被视为布尔值):

[ColumnName] == "Y" ? (DT_BOOL)1 : (DT_BOOL)0

运行该程序包时出现错误,并显示 无效的转换规范字符值由于可能会丢失数据,因此无法转换该值,实际导入到SQL Server(通过OLE DB Destination)时发生了这种情况。

我还需要做什么才能正确地进行转换?


我一直在研究做与此非常相似的事情,但我找不到在数据转换转换中哪里可以执行它。你是在哪里定义它的? - Steven Oxley
2
我相信我找到了 - 实际上是派生列转换。 - Steven Oxley
3个回答

21

尝试这个:

(DT_BOOL)([ColumnName] == "Y" ? 1 : 0)

这样做的好处是自动正确设置了派生列的数据类型。


13

我通过使用派生列解决了这个问题,而不是替换字符列,创建了新列并将其设置为DT_BOOL类型,例如:

[Recycled] == "Y" ? True : False

1
抱歉,我误解了,您不能用不同类型的列替换 SSIS 中的任何列,您总是需要添加新列。 - Cade Roux
1
虽然在转换任务中您可以创建另一个具有相同名称的列,但根据我的经验,后续管道中并不是所有组件都会显示完全限定名称作为component.column,因此这很烦人且危险。 - Cade Roux
没错 - 我也是吃了亏才知道的 ;-) - Wayne Molina

0

我遇到了同样的问题

(DT_BOOL)([ColumnName] == "Y" ? 1 : 0)

我只能通过将表达式中的"(DT_BOOL)"部分删除,并将转换为布尔值的工作放在“数据类型”部分上,选择“布尔值[DT_BOOL]”来解决它。之后没有出现任何问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接