|
DestinyJack
Starting Member
22 Posts |
Posted - 2005-09-13 : 06:46:31
|
| If i am going to loop through every record in a table with about 40k recordsand use the data to update another table, how should I loop it? I am currently using cursor to loop but it makes the performance very very poor. About 10 minutes everytime I try to run this stored procedure. Can anyone give me some idea on how to improve the following stored procedure?CREATE PROCEDURE [dbo].[pc_Update_PartnerData]@USERID VarChar(200),@TableName VarChar(200)ASDECLARE@sTable VarChar(50),@sTable1 VarChar(50),@sSQL VarChar(8000),@Partner_id Integer,@FileName nVarChar(10),@Sales Numeric(18),@Price Numeric(18),@Remarks nVarChar(500),@ShopID nVarChar(500)SET @sTable = @TableName SET @sSQL = 'DECLARE TMP_WORK CURSOR GLOBAL'SET @sSQL = @sSQL + ' FOR SELECT Partner_id, Filename, ISNULL(Sales, 0) AS Sales, ISNULL(Price, 0) As Price, ISNULL(Remarks, ''''), ShopID'SET @sSQL = @sSQL + ' FROM ' + @stableSET @sSQL = @sSQL + ' WHERE Partner_id IS NOT NULL'SET @sSQL = @sSQL + ' AND Filename IS NOT NULL'SET @sSQL = @sSQL + ' ORDER BY FileName, Partner_id'EXEC (@sSQL)OPEN TMP_WORKFETCH NEXT FROM TMP_WORK INTO @Partner_id, @Filename, @Sales, @Price, @Remarks, @ShopIDWHILE @@FETCH_STATUS = 0BEGIN SET @sTable1 = 'PART_' + LEFT(@Filename,2) SET @sSQL = 'UPDATE ' + @sTable1 + ' SET SSales = ' + convert(varchar(30),@Sales) + ' , SPrice = ' + convert(varchar(30),@Price) SET @sSQL = @sSQL + ' ,Remarks = ' + '''' + @Remarks + '''' SET @sSQL = @sSQL + ' ,SRetID = ' + '''' + RIGHT(@ShopID, 4) + '''' SET @sSQL = @sSQL + ' WHERE ID = ' + Convert(Varchar(30),@Partner_id) Exec(@sSQL)FETCH NEXT FROM TMP_WORK into @Partner_id, @Filename, @Sales, @Price, @Remarks, @ShopIDENDCLOSE TMP_WORKDEALLOCATE TMP_WORKGO |
|