tsql - 将 bit 转换为 int 返回负值

标签 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

最佳答案

非常有趣,如果你放一个数据查看器,你会看到下游,MyField 是 TRUE 或 FALSE,所以你可以做的是添加一个“派生列”组件来创建一个带有表达式的新列:
MyField == TRUE ? 1 : 0
然后将此新列映射到目标

关于tsql - 将 bit 转换为 int 返回负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37961800/

相关文章:

sql - 如何正确 SELECT INTO @TempTable 多次返回单个结果集?

c# - 包含/加入问题的 Entity Framework

sql-server - 如何在SSIS中将连接管理器离线属性设置为False

sql-server - 带有来自变量的动态 ConnectionString 的 SSIS 2012 Excel 源

c# - 插入语句奇怪的错误

sql-server - 调试具有用户定义数据类型的存储过程

sql-server - 是否可以在没有SSIS的情况下执行T-SQL模糊查找?

ssis - 如何在 ssis 包中的平面文件目标中保留空值

sql-server - SSIS:如果缺少任何文件,则停止 SSIS 包执行

ssis - DTExec : The package execution returned DTSER_FAILURE (1) in SSIS package execution