Try this option -
DECLARE @empid INT , @schedindate DATETIME , @ss NVARCHAR(100) , @indice NVARCHAR(2) , @FromDate DATETIME , @ToDate DATETIME , @TimeInR DATETIME , @TimeOutR DATETIME SELECT @FromDate = '20090114' , @ToDate = '20100130' DECLARE @temp TABLE ( schedindate DATETIME , TimeInR VARCHAR(10) , TimeOutR VARCHAR(10) , empid INT ) INSERT INTO @temp (schedindate, TimeInR, TimeOutR, empid) SELECT DISTINCT schedindate , TimeInR , TimeOutR , empid FROM dbo.ta_timecard WHERE schedindate BETWEEN @FromDate AND @ToDate DECLARE @ids TABLE(id BIGINT IDENTITY(1,1), emp BIGINT) INSERT INTO @ids (emp) SELECT DISTINCT empid FROM @temp INSERT INTO dbo.ta_MonthlyAttendance(id, EmpID) SELECT id, emp FROM @ids DECLARE cc CURSOR LOCAL FAST_FORWARD READ_ONLY FOR SELECT DISTINCT empid FROM @temp OPEN cc FETCH NEXT FROM cc INTO @empid WHILE (@@fetch_status = 0) BEGIN SELECT @indice = CAST(DATEDIFF(DAY, @fromdate, t.SchedInDate) AS NVARCHAR(4)) , @TimeInR = t.TimeInR , @schedindate = t.SchedInDate FROM @temp t WHERE empid = @empid SELECT @ss = 'update ta_MonthlyAttendance set NOD ' + @indice + ' = + dbo.ta_dayofweek(' + CHAR(39) + CONVERT(NVARCHAR(50), @schedindate, 102) + CHAR(39) + ' ) , TimeInR ' + @indice + ' = ' + @TimeInR + ' where empid = ' + CAST(@empid AS NVARCHAR(20)) EXEC sys.sp_executesql @ss FETCH NEXT FROM cc INTO @empid END CLOSE cc DEALLOCATE cc
source share