将位转换为 int returns 负值

Converting a bit to an int returns a negative value

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

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

出于某种原因,这个 returns 0 和 -1,而不是我期望的 +1。 甚至

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

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

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

由于这可能有点令人困惑,这里是来源 table:

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

GO

这是 table 的屏幕截图:

以及数据传输任务截图:

目的地 table 以及数据传输和转换的结果:

非常有趣,如果你放置一个数据查看器,你会看到下游,MyField 为 TRUE 或 FALSE,所以你可以做的是添加一个 "derived column" 组件以使用表达式创建一个新列:

MyField == TRUE ? 1 : 0

然后将这个新列映射到目标