I am new to SQL Server and know next to nothing about T-SQL, although I do know a bit about SQL. Our purchasing department got a database package and some customised T-SQL from an external company and it runs for over 12 hours !! I would appreciate any help or guidance on how to go about troubleshooting the code....[code]/* appclean.sql * * $Id: appclean.sql,v 1.6 2014/08/01 12:21:43 bok Exp $ * * Copyright (c) 2012-2014 Minerva Danmark A/S * * * * Programmed by: Bo Kaltoft * * * * Script for cleaning the application data for dataload. The * * result of the script will be partly stored in a result * * table HUM_DATAIMPORT_RES. The QTY column in the _RES table * * can be >0 if the QTY must be updated in Innovator or 0 if * * the application should be deleted. * * Records from the input table will be marked as processed if * * they are added to the _RES table or if it is found that they* * already exist in Innovator otherwise they will need to be * * loaded. * * * * Execution environment must provide: * * @batchid = <batchid> * * * * */SET NOCOUNT ON/* Replace null values in indexed columns */UPDATE innovator.HUM_DATAIMPORT_200 SET [BLOCK] = '' WHERE [BLOCK] IS NULL;UPDATE innovator.HUM_DATAIMPORT_200 SET [OP CODE] = '' WHERE [OP CODE] IS NULL;UPDATE innovator.HUM_DATAIMPORT_200 SET [APPL SFX] = '' WHERE [APPL SFX] IS NULL;declare @number bigint;DECLARE @family varchar(50);DECLARE @model varchar(50);DECLARE @type varchar(50);DECLARE @option varchar(50);DECLARE @block varchar(50);DECLARE @section varchar(50);DECLARE @item varchar(50);DECLARE @appsfx varchar(50);DECLARE @dcno varchar(50);DECLARE @begdt varchar(50);DECLARE @enddt varchar(50);DECLARE @dcpn varchar(50);DECLARE @qty varchar(50);DECLARE @mtpid char(32);DECLARE @strdt varchar(8) = CONVERT(varchar(8),SYSUTCDATETIME(),112);IF OBJECT_ID('#tempTable') IS NOT NULL DROP Table #tempTable SELECT IDENTITY(bigint,1,1) as number, mtp.[HUM_FAMILY_CODE], mtp.[HUM_MODEL_CODE], mtp.[HUM_TYPE_CODE], mtp.[HUM_OPTION_CODE], mtp.[HUM_BLOCK], mtp.[HUM_SECTION], mtp.[HUM_ITEM_CODE], mtp.[HUM_APPL_SFX], mtp.[HUM_DC_NO], mtp.[HUM_BEG_DT], mtp.[HUM_END_DT], mtp.[HUM_ITEM_NUMBER], mtp.[HUM_QUANTITY], mtp.[ID] into #tempTable FROM innovator.HUM_MODEL_TYPE_PART AS mtp INNER JOIN innovator.HUM_DATAIMPORT_MM AS mm ON (mm.[HUM_FAMILY_CODE] COLLATE DATABASE_DEFAULT = mtp.[HUM_FAMILY_CODE] COLLATE DATABASE_DEFAULT AND mm.[HUM_MODEL_CODE] COLLATE DATABASE_DEFAULT = mtp.[HUM_MODEL_CODE] COLLATE DATABASE_DEFAULT AND mm.[HUM_TYPE_CODE] COLLATE DATABASE_DEFAULT = mtp.[HUM_TYPE_CODE] COLLATE DATABASE_DEFAULT) WHERE mm.[BATCHID] = @batchid;DECLARE @count int = 0;set @number = (select MIN(number) from #tempTable);WHILE @number IS NOT NULLbegin SELECT @number = number, @FAMILY = HUM_FAMILY_CODE, @MODEL = HUM_MODEL_CODE, @TYPE = HUM_TYPE_CODE, @option = HUM_OPTION_CODE, @block = HUM_BLOCK, @section= HUM_SECTION, @item = HUM_ITEM_CODE, @appsfx = HUM_APPL_SFX, @dcno = HUM_DC_NO, @begdt = HUM_BEG_DT, @enddt = HUM_END_DT, @dcpn = HUM_ITEM_NUMBER, @qty = HUM_QUANTITY, @mtpid = ID FROM #tempTable WHERE number = @number; print(@family+@model+@type+@option); /* Set empty strings to null (i200 has '' values) */ /* Try to find deleted Application */ SET @enddt = (SELECT TOP 1 i200.[END DT] FROM innovator.HUM_DATAIMPORT_200 AS i200 WHERE i200.BATCHID = @batchid AND i200.[PROCESSED] = (0) AND i200.[ACTIVE] = (1) AND i200.[L1 DC PN] = @dcpn AND i200.[FAMILY] = @family AND i200.[MODEL] = @model AND i200.[TYPE] = @type AND i200.[OP CODE] = @option AND i200.[BLOCK] = @block AND i200.[SEC] = @section AND i200.[ITEM] = @item AND i200.[APPL SFX] = @appsfx AND i200.[DC NO BEAM] = @dcno AND i200.[BEG DT] = @begdt); /* We didn't find a value, so this indicates a delete */ IF(@enddt IS NULL) BEGIN SET @count = @count + 1; INSERT INTO innovator.HUM_DATAIMPORT_RES ([FAMILY],[MODEL],[TYPE],[OPTION],[BLOCK],[SECTION],[ITEM],[APPLSFX],[DC],[BEGDT], [ENDDT],[L1DCPN],[QTY],[MTPID],[BATCHID],[PROCESSED],[ACTIVE]) VALUES (@family,@model,@type,@option,@block,@section,@item,@appsfx,@dcno,@begdt, @strdt,@dcpn,'0',@mtpid,@batchid,(0),(1)); END /* Or changed Application */ ELSE IF(@qty != (SELECT i200.[QTY] FROM innovator.HUM_DATAIMPORT_200 AS i200 WHERE i200.BATCHID = @batchid AND i200.[PROCESSED] = (0) AND i200.[ACTIVE] = (1) AND i200.[L1 DC PN] = @dcpn AND i200.[FAMILY] = @family AND i200.[MODEL] = @model AND i200.[TYPE] = @type AND i200.[OP CODE] = @option AND i200.[BLOCK] = @block AND i200.[SEC] = @section AND i200.[ITEM] = @item AND i200.[APPL SFX] = @appsfx AND i200.[DC NO BEAM] = @dcno AND i200.[BEG DT] = @begdt)) BEGIN SET @count = @count + 1; INSERT INTO innovator.HUM_DATAIMPORT_RES ([FAMILY],[MODEL],[TYPE],[OPTION],[BLOCK],[SECTION],[ITEM],[APPLSFX],[DC],[BEGDT], [ENDDT],[L1DCPN],[QTY],[MTPID],[BATCHID],[PROCESSED],[ACTIVE]) VALUES (@family,@model,@type,@option,@block,@section,@item,@appsfx,@dcno,@begdt, @enddt,@dcpn,@qty,@mtpid,@batchid,(0),(1)); UPDATE innovator.HUM_DATAIMPORT_200 SET PROCESSED=(1) WHERE BATCHID = @batchid AND [PROCESSED] = (0) AND [ACTIVE] = (1) AND [L1 DC PN] = @dcpn AND [FAMILY] = @family AND [MODEL] = @model AND [TYPE] = @type AND [OP CODE] = @option AND [BLOCK] = @block AND [SEC] = @section AND [ITEM] = @item AND [APPL SFX] = @appsfx AND [DC NO BEAM] = @dcno AND [BEG DT] = @begdt; END set @number = (select MIN(number) from #tempTable where number>@number);ENDSET NOCOUNT OFF[/code]This is RBAR processing at its worst !!!
↧