troubleshooting Question

SSIS is skipping random rows

Avatar of Ali Shah
Ali ShahFlag for United Kingdom of Great Britain and Northern Ireland asked on
SSIS
8 Comments1 Solution185 ViewsLast Modified:
Hi Guys,

I am transferring 1000 rows from a SQL Data Source to SQL Destination using OLEDB Command control. I am using OLEDB Command because i need to execute the stored procedure for each row.
I have found that 974 rows were transferred. I figured out which rows were skipped and then executed stored procedure manually to see if any errors but manually stored procedure ran successfully and it inserted those records.

I have also created a flow task to include only those records which missed during the first load
SELECT TOP ( 1000 )
        AddressStringId ,
        HASHBYTES('SHA1', CONVERT(VARCHAR(12), AddressStringId)) AS Guid ,
        HASHBYTES('SHA1', SearchString) AS UniqueHashString ,
        OrganisationName AS LocationName ,
        OrganisationName AS AddressLine1 ,
        SubBuildingName AS AddressLine2 ,
        '' AS AddressLine3 ,
        BuildingNumber ,
        BuildingName ,
        StreetFirstPart + ' ' + StreetSecondPart AS Street ,
        '' AS Locality ,
        'England' AS AdministrativeArea ,
        '' AS SubAdministrativeArea ,
        PostTown AS Municipality ,
        PostCode ,
        'GB' AS Iso3166MinusOneCountryAlpha2Code ,
        STR(Longitude, 25, 5) AS Longitude ,
        STR(Latitude, 25, 5) Latitude ,
        SearchString ,
        3.0 AS PointBufferDistanceInMeters ,
		--below are the output parameters in the stored procedure however SSIS doesn't seem to handle this. so passing 0 or null values for these parameters
        ISNULL(ERROR_NUMBER(), 0) AS ErrorNumber ,
        ISNULL(ERROR_SEVERITY(), 0) AS ErrorSeverity ,
        ISNULL(ERROR_STATE(), 0) AS ErrorState ,
        ISNULL(ERROR_PROCEDURE(), 0) AS ErrorProcedure ,
        ISNULL(ERROR_LINE(), 0) AS ErrorLine ,
        ISNULL(ERROR_MESSAGE(), '') AS ErrorMessage ,
        0 AS InsertedRecords
FROM    AddressStringSearch
WHERE AddressStringId IN (16855935,16855951,16856022,16856056,16856155,16856162,16856207,16856243,16856257,16856301,16856362,16856406,16856430,16856444,16856453,16856453,16856491,16856585
,16856602,16856623,16856650,16856680,16856687,16856701,16856703,16856758,16856809)

The task ran successfully without any error but no records got transferred.
That's how i manually executed the stored procedure
USE [Spaces]
GO

DECLARE	@return_value int,
		@ErrorNumber int,
		@ErrorSeverity int,
		@ErrorState int,
		@ErrorProcedure nvarchar(128),
		@ErrorLine int,
		@ErrorMessage nvarchar(4000),
		@NumberOfInsertedLocations INT
        
				DECLARE @Wgs84Longitude1 AS FLOAT =CAST(LTRIM(RTRIM('                 -2.15637')) AS FLOAT)
		DECLARE @Wgs84Latitude1 AS FLOAT =  CAST(LTRIM(RTRIM('                 57.26038')) AS FLOAT)

EXEC	@return_value = [CrossContext].[USP_Locations_AddPointLocations]
		@LocationGuid = 0x9F24EC0E32CD4ED6FC96B737D9CBD8FD4DFEA8E2,
		@AddressStringId=16855951,
		@LocationName = N'',
		@AddressLine1 = N'',
		@AddressLine2 = N'',
		@AddressLine3 = N'',
		@BuildingNumbers = N'10',
		@BuildingName = N'',
		@Street = N'BROOMHILL WAY',
		@Locality = N'',
		@Municipality = N'ABERDEEN',
		@AdministrativeArea = N'England',
		@SubAdministrativeArea = N'',
		@PostalCode = N'AB21 0AA',
		@Iso3166MinusOneCountryAlpha2Code = N'GB',
		@Wgs84Longitude =@Wgs84Longitude1,
		@Wgs84Latitude =  @Wgs84Latitude1,
		@PointBufferDistanceInMeters = 3.0,
		@UniqueHashString = N'0xC6566F541E3CC5B2066541379CCA27F9EB522901',
		@ErrorNumber = @ErrorNumber OUTPUT,
		@ErrorSeverity = @ErrorSeverity OUTPUT,
		@ErrorState = @ErrorState OUTPUT,
		@ErrorProcedure = @ErrorProcedure OUTPUT,
		@ErrorLine = @ErrorLine OUTPUT,
		@ErrorMessage = @ErrorMessage OUTPUT,
		@NumberOfInsertedLocations = @NumberOfInsertedLocations OUTPUT

SELECT	@ErrorNumber as N'@ErrorNumber',
		@ErrorSeverity as N'@ErrorSeverity',
		@ErrorState as N'@ErrorState',
		@ErrorProcedure as N'@ErrorProcedure',
		@ErrorLine as N'@ErrorLine',
		@ErrorMessage as N'@ErrorMessage',
		@NumberOfInsertedLocations as N'@NumberOfInsertedLocations'

SELECT	'Return Value' = @return_value

GO

I manually passed the values for two Ids 16855935 and 16855951. The stored procedure ran fine.
Now i am totally confused as why is it happening can you please help?
ASKER CERTIFIED SOLUTION
Join our community to see this answer!
Unlock 1 Answer and 8 Comments.
Start Free Trial
Learn from the best

Network and collaborate with thousands of CTOs, CISOs, and IT Pros rooting for you and your success.

Andrew Hancock - VMware vExpert
See if this solution works for you by signing up for a 7 day free trial.
Unlock 1 Answer and 8 Comments.
Try for 7 days

”The time we save is the biggest benefit of E-E to our team. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange.

-Mike Kapnisakis, Warner Bros