![]() | |
![]() |
| | Thread Tools | Display Modes |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
Hi I have written following stored procedure but it take way too long to complete. I will be processing thousands of records and it is slow. I am importing data from a source table and adding logic and then inserting into another table. Any help with speeding it up will be highly appreciated. Thanks Divyesh /***********************/ CREATE PROCEDURE dbo.acc_import as declare @sysid int, @code varchar(10), @name varchar(80), @o_name varchar(80), @errcode int, @rcount int, @status_code varchar(10), @status_desc varchar(50), @status_sysid int, @office_code varchar(10), @office_desc varchar(50), @office_sysid varchar(10), @dept_code varchar(10), @dept_desc varchar(50), @dept_sysid int, @cla_opendate int, @sql_opendate datetime, @cla_closedate int, @sql_closedate datetime, @oldcode varchar(10), @entity_id int, @entity_type varchar (50), @status_ltype_id int, @status_ltype_desc varchar (10), @ltype_aka_code varchar (10), @refentity_id int /** cursor through Clients table **/ select @entity_id = LEVEL1_ID from LEVELCONFIG select @status_ltype_id = STATUS_ID from SYSCONFIG select @ltype_aka_code = ALIAS_CODE FROM ImportSetup declare client_cursor cursor for select Code,Name,OpenDate,CloseDate,StatusCode,OfficeCode ,DeptCode,OldCode from ImportClient for read only set nocount on open client_cursor fetch client_cursor into @code, @name, @sql_opendate, @sql_closedate, @status_code, @office_code, @dept_code, @oldcode while @@fetch_status = 0 begin IF NOT EXISTS (SELECT 1 FROM REFENTITY WHERE REFENTITY.ENTITY_REF = @code and REFENTITY.ENTITY_ID = @entity_id) begin select @errcode=@@error if @errcode<>0 return @errcode /** Get Status **/ select @status_sysid = LTABLE.LTABLE_ID, @status_desc = LTABLE.LTABLE_DESC from LTABLE where LTABLE.LTYPE_ID = @status_ltype_id and LTABLE.LTABLE_CODE = @status_code /** Entity Type Description **/ select @entity_type = ENTITY_TYPE.ENTITY_TYPE_DESC from ENTITY_TYPE where ENTITY_TYPE.ENTITY_TYPE_ID = @entity_id insert into REFENTITY ( ENTITY_ID, ENTITY_TYPE, ENTITY_REF, ENTITY_DESC, ENTITY_DESC_LONG, STATUS_ID, STATUS_DESC REF_HIERARCHY ) values ( @entity_id, --ENTITY_ID, @entity_type, -- ENTITY_TYPE, @code, --ENTITY_REF, @name, -- ENTITY_DESC, '', --ENTITY_DESC_LONG, @status_sysid, @status_desc @code ) select @errcode=@@error if @errcode<>0 return @errcode SET @refentity_id = @@IDENTITY UPDATE REFENTITY SET HIERARCHY = '.' + CAST(@@IDENTITY AS varchar(10)) + '.' WHERE REFENTITY_ID = @refentity_id END/**IF NOT EXISTS EXISTS **/ else begin SELECT @sysid = REFENTITY.REFENTITY_ID, @o_name = REFENTITY.ENTITY_DESC FROM REFENTITY WHERE REFENTITY.ENTITY_REF = @code and REFENTITY.ENTITY_ID = @entity_id /** Get Status **/ select @status_sysid = LTABLE.LTABLE_ID, @status_desc = LTABLE.LTABLE_DESC from LTABLE where LTABLE.LTYPE_ID = @status_ltype_id and LTABLE.LTABLE_CODE = @status_code UPDATE REFENTITY SET --ENTITY_REF = @code, --ENTITY_REF, ENTITY_DESC = @name, -- ENTITY_DESC, STATUS_ID = @status_sysid, -- STATUS_ID, STATUS_DESC = @status_desc, --STATUS_DESC, OFFICE_ID = @office_sysid, --OFFICE_ID, OFFICE_DESC = @office_desc, --OFFICE_DESC, EDITSTAMPFIELD = dbo.fn_GetDate (getdate()), --EDITSTAMPFIELD, EDIT_USER_NO = 1, --EDIT_USER_NO, DATE_CREATION = dbo.fn_GetClarionDate (@sql_opendate), DATE_INACTIVE = dbo.fn_GetClarionDate (@sql_closedate) WHERE REFENTITY.ENTITY_REF = @code AND REFENTITY.ENTITY_ID = @entity_id select @errcode=@@error if @errcode<>0 return @errcode IF LTRIM(RTRIM(@name)) <> LTRIM(RTRIM(@o_name)) begin EXEC acc_import_aka_xe 10,@sysid,@o_name,@ltype_aka_code,1 end END/** IF EXISTS **/ fetch client_cursor into @code, @name, @sql_opendate, @sql_closedate, @status_code, @office_code, @dept_code, @oldcode end /** END OF WHILE client_cursor **/ close client_cursor DeAllocate client_cursor set nocount off go |
#3
| |||
| |||
|
#4
| |||
| |||
|
|
Hi I have written following stored procedure but it take way too long to complete. I will be processing thousands of records and it is slow. I am importing data from a source table and adding logic and then inserting into another table. Any help with speeding it up will be highly appreciated. Thanks Divyesh /***********************/ CREATE PROCEDURE dbo.acc_import as declare @sysid int, @code varchar(10), @name varchar(80), @o_name varchar(80), @errcode int, @rcount int, @status_code varchar(10), @status_desc varchar(50), @status_sysid int, @office_code varchar(10), @office_desc varchar(50), @office_sysid varchar(10), @dept_code varchar(10), @dept_desc varchar(50), @dept_sysid int, @cla_opendate int, @sql_opendate datetime, @cla_closedate int, @sql_closedate datetime, @oldcode varchar(10), @entity_id int, @entity_type varchar (50), @status_ltype_id int, @status_ltype_desc varchar (10), @ltype_aka_code varchar (10), @refentity_id int /** cursor through Clients table **/ select @entity_id = LEVEL1_ID from LEVELCONFIG select @status_ltype_id = STATUS_ID from SYSCONFIG select @ltype_aka_code = ALIAS_CODE FROM ImportSetup declare client_cursor cursor for select Code,Name,OpenDate,CloseDate,StatusCode,OfficeCode ,DeptCode,OldCode from ImportClient for read only set nocount on open client_cursor fetch client_cursor into @code, @name, @sql_opendate, @sql_closedate, @status_code, @office_code, @dept_code, @oldcode while @@fetch_status = 0 begin IF NOT EXISTS (SELECT 1 FROM REFENTITY WHERE REFENTITY.ENTITY_REF = @code and REFENTITY.ENTITY_ID = @entity_id) begin select @errcode=@@error if @errcode<>0 return @errcode /** Get Status **/ select @status_sysid = LTABLE.LTABLE_ID, @status_desc = LTABLE.LTABLE_DESC from LTABLE where LTABLE.LTYPE_ID = @status_ltype_id and LTABLE.LTABLE_CODE = @status_code /** Entity Type Description **/ select @entity_type = ENTITY_TYPE.ENTITY_TYPE_DESC from ENTITY_TYPE where ENTITY_TYPE.ENTITY_TYPE_ID = @entity_id insert into REFENTITY ( ENTITY_ID, ENTITY_TYPE, ENTITY_REF, ENTITY_DESC, ENTITY_DESC_LONG, STATUS_ID, STATUS_DESC REF_HIERARCHY ) values ( @entity_id, --ENTITY_ID, @entity_type, -- ENTITY_TYPE, @code, --ENTITY_REF, @name, -- ENTITY_DESC, '', --ENTITY_DESC_LONG, @status_sysid, @status_desc @code ) select @errcode=@@error if @errcode<>0 return @errcode SET @refentity_id = @@IDENTITY UPDATE REFENTITY SET HIERARCHY = '.' + CAST(@@IDENTITY AS varchar(10)) + '.' WHERE REFENTITY_ID = @refentity_id END/**IF NOT EXISTS EXISTS **/ else begin SELECT @sysid = REFENTITY.REFENTITY_ID, @o_name = REFENTITY.ENTITY_DESC FROM REFENTITY WHERE REFENTITY.ENTITY_REF = @code and REFENTITY.ENTITY_ID = @entity_id /** Get Status **/ select @status_sysid = LTABLE.LTABLE_ID, @status_desc = LTABLE.LTABLE_DESC from LTABLE where LTABLE.LTYPE_ID = @status_ltype_id and LTABLE.LTABLE_CODE = @status_code UPDATE REFENTITY SET --ENTITY_REF = @code, --ENTITY_REF, ENTITY_DESC = @name, -- ENTITY_DESC, STATUS_ID = @status_sysid, -- STATUS_ID, STATUS_DESC = @status_desc, --STATUS_DESC, OFFICE_ID = @office_sysid, --OFFICE_ID, OFFICE_DESC = @office_desc, --OFFICE_DESC, EDITSTAMPFIELD = dbo.fn_GetDate (getdate()), --EDITSTAMPFIELD, EDIT_USER_NO = 1, --EDIT_USER_NO, DATE_CREATION = dbo.fn_GetClarionDate (@sql_opendate), DATE_INACTIVE = dbo.fn_GetClarionDate (@sql_closedate) WHERE REFENTITY.ENTITY_REF = @code AND REFENTITY.ENTITY_ID = @entity_id select @errcode=@@error if @errcode<>0 return @errcode IF LTRIM(RTRIM(@name)) <> LTRIM(RTRIM(@o_name)) begin EXEC 10,@sysid,@o_name,@ltype_aka_code,1 end END/** IF EXISTS **/ fetch client_cursor into @code, @name, @sql_opendate, @sql_closedate, @status_code, @office_code, @dept_code, @oldcode end /** END OF WHILE client_cursor **/ close client_cursor DeAllocate client_cursor set nocount off go |
![]() |
| Thread Tools | |
| Display Modes | |
| |