The following query is running slow. for one value in memberid, there are multiple entries in memberid0, memberid1........ memberid9. Therefore each statement is effecting multiple row updates. Ofcourse the table size is in MBs
Declare @memberName nvarchar(250)
Declare @memberID bigint
Declare @dimId int
Declare @levelId int
Declare @newName nvarchar(250)
Declare @updateSQL1 nvarchar(500)
Declare @updateSQL2 nvarchar(500)
Declare @cursorStmt nvarchar(300)
Declare @custCounter bigint
Declare @prodCounter bigint
Declare @regCounter bigint
Declare @memberCounter int
SET @custCounter = 1
SET @prodCounter = 1
SET @regCounter = 1
SET @memberCounter = 0
BEGIN TRANSACTION
While @memberCounter < 3
Begin
Set @cursorStmt = 'Declare memberCursor CURSOR
FOR Select name, memberid, dimensionId, levelNumber from member' + CAST(@memberCounter as NVARCHAR(1)) + ' where memberID <> 0 order by memberid'
print @cursorStmt
exec sp_executesql @cursorStmt
OPEN memberCursor
FETCH NEXT FROM memberCursor INTO @memberName, @memberId, @dimId, @levelId
WHILE @@FETCH_STATUS = 0
BEGIN
IF @dimId = 0
BEGIN
SET @newName = 'Customer_' + CAST(@custCounter AS NVARCHAR(10)) + '_LEVEL_' + CAST(@levelId AS NVARCHAR(10))
SET @custCounter = @custCounter + 1
END
else if @dimId = 1
BEGIN
SET @newName = 'Product_' + CAST(@prodCounter AS NVARCHAR(10)) + '_LEVEL_' + CAST(@levelId AS NVARCHAR(10))
SET @prodCounter = @prodCounter + 1
END
else if @dimId = 2
BEGIN
SET @newName = 'Region_' + CAST(@regCounter AS NVARCHAR(10)) + '_LEVEL_' + CAST(@levelId AS NVARCHAR(10))
SET @regCounter = @regCounter + 1
END
SET @updateSQL1 = 'Update Member' + CAST(@dimId AS NVARCHAR(5)) + ' set name = ''' + @newName + ''' where memberId = ' + CAST(@memberId AS NVARCHAR(10))
SET @updateSQL2 = 'Update Member' + CAST(@dimId AS NVARCHAR(5)) + ' set memberName' + CAST(@levelId-1 AS NVARCHAR(5)) + ' = ''' + @newName + ''' where memberId' + CAST(@levelId-1 AS NVARCHAR(5)) + ' = ' + CAST(@memberId AS NVARCHAR(10))
--print @updateSQL1
--print @updateSQL2
exec sp_executesql @updateSQL1
exec sp_executesql @updateSQL2
FETCH NEXT FROM memberCursor INTO @memberName, @memberId, @dimId, @levelId
END
CLOSE memberCursor
DEALLOCATE memberCursor
Set @memberCounter = @memberCounter + 1
END