将位转换为int将返回负值

时间:2016-06-22 07:52:28

标签: tsql ssis-2012

我正在尝试将源数据库中的位字段转换为SSIS项目(SQL Server 2012)中数据仓库中的整数值

Select cast([MyField] as int) as TheField from MyTable

出于某种原因,这会返回0和-1,而不是我期待的+1。 甚至

Select abs(cast([MyField] as int)) as TheField from MyTable

将在目标表中生成-1。 SELECT语句在预览和SSMS中按预期工作,我看到了所需的0和1.但是SSIS包中的实际数据传输任务并没有按预期工作。我尝试了数据转换任务,并在没有任务的情况下直接写入表中。

我真的不想使用额外的更新语句将我的int值乘以-1。

由于这可能有点混乱,这里是源表:

CREATE TABLE [dbo].[empl](
[Name] [nvarchar](100) NULL,
[active] [bit] NULL
) ON [PRIMARY]

GO

以下是该表的屏幕截图:

enter image description here

数据传输任务的屏幕截图:

enter image description here

包含数据传输和转换结果的目标表:

enter image description here

1 个答案:

答案 0 :(得分:3)

非常有趣,如果您放置数据查看器,您将看到下游,MyField为TRUE或FALSE,那么您可以做的是添加一个"派生列"使用表达式

创建新列的组件

MyField == TRUE ? 1 : 0

然后将此新列映射到目标