在Package中处理 bit列

SQL Server没有boolean类型,使用bit 类型来代替,bit类型有两个值:0 和 1,而SSIS package中有boolean类型,SSIS自动将bit 类型转换成boolean类型,将 1 转换成 True,0 转换成False。在SSIS Package中,如果Table column 的 data type 为 bit,那么Package在输出时自动进行转化,将 1 转换成 True,0 转换成False。

如果要将SQL Server 的Bit 类型转换成Int 类型(0,1),或转换成 String 类型(“0” 或 “1”),而不是(“True”或“False”),需要增加一个Derived Column
IsFlagged_bit = [IsFlagged] ? (DT_UI1)1 : (DT_UI1)0

示例

1,Code

复制代码
create table dbo.TestBit
(
ID int,
name varchar(10),
IsMerged bit
)
go

insert into dbo.TestBit
values(1,'a',0),(2,'b',1)
go

--get data
select *
from dbo.TestBit
复制代码

2,使用OLE DB Source 来获取数据

点击Preview...,看到IsMerged 字段的值不是0 或1, 而是转换成True 或False。

3,将bit 类型的数据插入到smallint(int,或 bigint)

使用OLEDB destination,将数据插入到 table dbo.TestBit_Target。

复制代码
create table dbo.TestBit_Target
(
ID int,
name varchar(10),
IsMerged smallint
)
go
复制代码

Mapping 关系是:

4,查看插入的结果,Bit 为1 的数据转换成 smallint时,由1 转变成 -1 。这是一个错误。

5,Workaround : 使用derived column, Expression 是:(DT_I2)(IsMerged ? 1 : 0)

参考文档:

SSIS: True/False and 1/0 values on Bit Columns

原文地址:https://www.cnblogs.com/xieyulin/p/7050677.html