Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Converting a bit to an int returns a negative value

I am trying to convert a bit field from the source DB into an integer value in the Data Warehouse in a SSIS Project (SQL Server 2012)

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

For some reason this returns 0 and -1, as opposed to the +1 I am expecting. Even

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

will yield the -1 in the destination table. The SELECT statement works as intended in the preview as well as in SSMS and I see the desired 0 and 1. However the actual Data Transfer task in the SSIS Package isn't working as intended. I tried the data conversion task and a direct writing into the table without the task.

I really don't want to use an additional update statement to multiply my int values with -1.

As this may be a little confusing, here is the source table:

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

GO

Here is the screenshot of the table:

enter image description here

And the screenshot of the data transfer task:

enter image description here

The destination table with the result of the Data transfer and conversion:

enter image description here

like image 339
Andre Doose Avatar asked Oct 18 '25 02:10

Andre Doose


1 Answers

very interesting, if you put a data viewer you will see that downstream, MyField is either TRUE or FALSE, so what you can do is add a "derived column" component to create a new column with the expression:

MyField == TRUE ? 1 : 0

then map this new column to the destination

like image 103
Jayvee Avatar answered Oct 20 '25 09:10

Jayvee



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!