Tsql 将位转换为整数将返回负值

Tsql 将位转换为整数将返回负值,tsql,ssis-2012,Tsql,Ssis 2012,我正在尝试将源数据库中的位字段转换为SSIS项目(SQL Server 2012)中数据仓库中的整数值 出于某种原因,它返回0和-1,而不是我期望的+1。 甚至 将在目标表中生成-1。 SELECT语句在预览和SSMS中都能正常工作,我看到了所需的0和1。但是,SSIS包中的实际数据传输任务没有按预期工作。我尝试了数据转换任务,并在没有该任务的情况下直接写入表 我真的不想使用额外的update语句将我的int值乘以-1 由于这可能有点混乱,以下是源表: CREATE TABLE [dbo].[e

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

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

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

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

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

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

GO
以下是表格的屏幕截图:

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

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


非常有趣,如果您将data viewer放在下游,您将看到MyField为TRUE或FALSE,因此您可以添加一个“派生列”组件来创建一个具有以下表达式的新列:

MyField==TRUE?1:0


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

这会比后续SQL语句更新表集合field=field*(-1)更快吗?我仅有的值是0和-1。我已删除我的答案。这是最好的解决方案。性能差异不大,此解决方案的唯一优点是稍微(没有双关语:)整洁,因为它充当了从真/假的数据转换,真/假是管道中始终存在的实际值,而不管MyField中的原始值如何。很好,我将使用派生列。“yes”值如何转换为-1而不是1仍然很有趣,但这显然是一个特性,而不是一个bug:-)
Select abs(cast([MyField] as int)) as TheField from MyTable
CREATE TABLE [dbo].[empl](
[Name] [nvarchar](100) NULL,
[active] [bit] NULL
) ON [PRIMARY]

GO