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。
A bit value is either 0 or 1.
A boolean value is either True or False.
SQL Server has a bit data type. It does not have a boolean data type. Non-nullable bits are frequently used in SQL Server to simulate boolean data.
SSIS uses .Net data types, not SQL data types. It supports boolean, not bit. It has certain built-in auto-conversions, among which is an auto-conversion of bits to Nullable<bool>.
如果要将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