我正在尝试将源数据库中的位字段转换为 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
这是表的屏幕截图:
以及数据传输任务的截图:
具有数据传输和转换结果的目标表:
最佳答案
非常有趣,如果你放一个数据查看器,你会看到下游,MyField 是 TRUE 或 FALSE,所以你可以做的是添加一个“派生列”组件来创建一个带有表达式的新列:MyField == TRUE ? 1 : 0
然后将此新列映射到目标
关于tsql - 将 bit 转换为 int 返回负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37961800/