SSIS - error while load into fact table - ssis

I'm trying to load some data from OLE DB database with related dimensions into my fact table (which have primary keys of this dimensions) using SSIS and I'm getting some error like this:
[F_Sales [132]] Error: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB
error has occurred. Error code: 0x80004005. An OLE DB record is
available. Source: "Microsoft SQL Server Native Client 11.0"
Hresult: 0x80004005 Description: "Unspecified error".
[F_Sales [132]] Error: There was an error with F_Sales.Inputs[OLE DB
Destination Input].Columns[Customer_ID] on F_Sales.Inputs[OLE DB
Destination Input]. The column status returned was: "The value
violated the integrity constraints for the column."
I'm a beginner in SSIS but it doesn't make sense that there is some Customer_ID which is NULL because this column is auto increment.
Does anybody know solution of that problem?

Related

SSIS Package to copy data from one to another error

I have setup a SSIS package to copy over some data from one table to another. At first I tried doing from one server to another server, did not succeed. Then I tried it doing within the same server, no luck again. I followed couple tutorials/videos how to do it and followed the exact pattern.
However here's what I tried to do:
Create a "Data Flow Task"
Under "Data Flow" tab create an "OLE DB Source" and "OLE DB Destination"
Configure the "OLE DB connection manager" and setup the column mapping, verify connection status for both source and destination
When I run the package I get following errors
Here are the 5 errors that are in the above figure,
[OLE DB Destination 2] Error: SSIS Error Code DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER. The AcquireConnection method call to the connection manager "STLEDGSQL01.MES_DEV" failed with error code 0xC0202009. There may be error messages posted before this with more information on why the AcquireConnection method call failed.
[SSIS.Pipeline] Error: OLE DB Destination failed validation and returned error code 0xC020801C.
[SSIS.Pipeline] Error: One or more component failed validation.
Error: There were errors during task validation.
[Connection manager "STLEDGSQL01.MES_DEV"] Error: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005.
An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 Description: "A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.".
An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 Description: "Client unable to establish connection".
An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 Description: "Registry information is corrupt or missing. Make sure the provider is installed and registered correctly.".
Now I have tried applying couple of solution that I found in stackoverflow and out in the internet, such as following but nothing helped me so far.
Set delay validation property at package level to True from false
Change ProtectionLevel to EncryptSensitiveWithUserKey
Any help is greatly appreciated!
For anyone who's interested or had the same issue as mine, I just found the answer. I was using the wrong TargetServerVersion in project properties. My SQL server is 2016 and it was defaulted to 2019 automatically in this property page. I did change it back to 2016 and yes it all starts working.
I suggest that you do not use SSIS to move data around inside a database. Just use a stored prcedure or script. Here is a sample script that will copy data from one table to another, but only for data that doesn't exist in the target.
insert into targettable (PrimaryKeyColumn,Column1,Column2,Column3)
select PrimaryKeyColumn,Column1,Column2,Column3
from sourcetable SRC
where not exists (
select *
from targettable TGT
where TGT.PrimaryKeyColumn = SRC.PrimaryKeyColumn
)

how to handling null values in ssis datatypes is integer

How do I load null vaules in integer datat type file?
I want load csv file data into sql server table using ssis package.
Source csv file emp data is
id | Name | deptno
1 |ab |NULL
2 | |NULL
3 |dhd |NULL
Target sql server table emp:
id int, name varchar(50), deptno int
I treid datatype using showadvaned mode for external columns and output columns as per target table datatypes
after that I execute the package .here i am unable to load null values in int deptno filed
and getting errors like below :
[OLE DB Destination [27]] Error: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80040E21.
An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80040E21 Description: "Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.".
[OLE DB Destination [27]] Error: There was an error with OLE DB Destination.Inputs[OLE DB Destination Input].Columns[depno] on OLE DB Destination.Inputs[OLE DB Destination Input]. The column status returned was: "The value could not be converted because of a potential loss of data.".
[OLE DB Destination [27]] Error: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR. The "OLE DB Destination.Inputs[OLE DB Destination Input]" failed because error code 0xC0209077 occurred, and the error row disposition on "OLE DB Destination.Inputs[OLE DB Destination Input]" specifies failure on error. An error occurred on the specified object of the specified component. There may be error messages posted before this with more information about the failure.
[SSIS.Pipeline] Error: SSIS Error Code DTS_E_PROCESSINPUTFAILED. The ProcessInput method on component "OLE DB Destination" (27) failed with error code 0xC0209029 while processing input "OLE DB Destination Input" (40). The identified component returned an error from the ProcessInput method. The error is specific to the component, but the error is fatal and will cause the Data Flow task to stop running. There may be error messages posted before this with more information about the
failure.
I tried another way using derived column : UPPER([deptno]) == "NULL" ? NULL(DT_I4) : [deptno] this also giving error
Can you please tell me how to load null values in sql server tables for integer datatypes using ssis packages?
start with data type as varchar(25)
and then derive your integer column using your formula:
UPPER([deptno]) == "NULL" ? NULL(DT_I4) : (DT_I4)[deptno]
I think you just forgot to add the final cast.
You are going to need to do this for all non-numbers in your csv. So most likely an empty string ("") as well.
So...
UPPER([deptno]) == "NULL" ? NULL(DT_I4) : deptno == "" ? null(DT_I4) :(DT_I4)[deptno]

SSIS OLE Destination several error output

I have a problem...
I have an OLE DB error that occurred in INSERT statement than conflicted with the FOREIGN KEY constraint.
SSIS package eturn this 3 errors:
[OLE_DEST PollOptionUserResult [43]] Error: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005.
An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 Description: "The statement has been terminated.".
An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 Description: "The INSERT statement conflicted with the FOREIGN KEY constraint "FK_PollOptionUserResult_PollUserResult". The conflict occurred in database "dw_ismsES", table "ten.PollUserResult", column 'PollUserResultID'.".
[OLE_DEST PollOptionUserResult [43]] Error: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR. The "OLE_DEST PollOptionUserResult.Inputs[OLE DB Destination Input]" failed because error code 0xC020907B occurred, and the error row disposition on "OLE_DEST PollOptionUserResult.Inputs[OLE DB Destination Input]" specifies failure on error. An error occurred on the specified object of the specified component. There may be error messages posted before this with more information about the failure.
[SSIS.Pipeline] Error: SSIS Error Code DTS_E_PROCESSINPUTFAILED. The ProcessInput method on component "OLE_DEST PollOptionUserResult" (43) failed with error code 0xC0209029 while processing input "OLE DB Destination Input" (56). The identified component returned an error from the ProcessInput method. The error is specific to the component, but the error is fatal and will cause the Data Flow task to stop running. There may be error messages posted before this with more information about the failure.
When I try redirect error to my error_table, it internally for some reason take the last one and no the first one I need.
How I can obligate it to take the first one error?
In my case (SSIS 2008), I created an OnError event in the package level, so every error happening in the package would be logged, regardless of where they happened. When I take this approach, all 3 errors should be logged in my error table. I.e.
Please try this approach and see what you get.

"Not enough storage" Error When Trying To Select Destination Table in SSIS

I am building an SSIS package and getting an error when setting "Name of the table or the view" in the OLE DB Destination editor.
SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred.
Error code: 0x8007000E. An OLE DB record is available.
Source: "Microsoft SQL Native Client 10.0" Hresult: 0x8007000E
Description: "Not enough storage is available to complete this operation.".
Failed to open a fastload rowset for "[dbo].[MyTable]".
Check that the object exists in the database.
Exception from HRESULT: 0xC0202040 (Microsoft.SqlServer.DTSPipelineWrap)
But, the table is definately there.
What could be causing this error?
Try saving the package and exiting from BIDS. Then start again, and try fixing the destination component.
It's only complaining about the table because it was in the process of handling that table at the time of the Out of Memory exception. It has a one track mind about that - failure setting up table == table does not exist.

SSIS fuzzy lookup with multiple outputs per lookup error

I have a pretty simple SSIS package with 3 components:
OLE DB Source
Fuzzy Lookup
OLE DB Destination
In the fuzzy lookup component I changed in the advanced tab the "Maximum number of matches to output per lookup" from 1 to 2.
When I run the package after the change I get this error message:
[OLE DB Destination [57]] Error: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005. An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80004005 Description: "OLE DB provider 'STREAM' for linked server '(null)' returned invalid data for column '[!BulkInsert]._Confidence'. "
Changing the number back to 1 works again. The OLE DB Source has around 45000 rows and the lookup has around 580000 rows.
I don't know how to address this problem further, so any help is appreciated!
Thanks
Daniel
I solved the issue:
The confidence column has to have the data type "float" and not "real".
Daniel