码迷,mamicode.com
首页 > 其他好文 > 详细

在Package中处理 bit column

时间:2016-01-19 14:03:43      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

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

 

在Package中处理 bit column

标签:

原文地址:http://www.cnblogs.com/ljhdo/p/5141560.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!