yogirk

Cursors

Jan 23rd, 2012
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 3.25 KB | None | 0 0
  1. --Step#1 and Step#2
  2. -- The results are stored into a temporary table in PVDB, ProjectOID_Temp.
  3. -- Truncate Table ProjectOID_Temp  before running this step to start afresh.
  4.  
  5. DEClARE @ProjectOID as nvarchar (100)
  6. DECLARE @TaskOID as nvarchar (100)
  7.  
  8. DECLARE ProjectOID_Cursor CURSOR FOR
  9. SELECT  OID as projectOID
  10. from    project
  11. WHERE   ( state = 3 )
  12.         AND ( status = 1 )
  13.         AND ( trackETC = 1 )
  14. OPEN ProjectOID_Cursor
  15. FETCH NEXT FROM ProjectOID_Cursor INTO @ProjectOID
  16. WHILE @@FETCH_STATUS = 0
  17. BEGIN
  18.    
  19.     INSERT ProjectOID_Temp (ProjectOID, TaskOID)
  20.     SELECT  projectOID,
  21.         OID AS taskOID
  22.     FROM    projecttask
  23.     WHERE   projectOID = @projectOID
  24.         AND trackTime = 1
  25.         AND parentTaskOID IS NOT NULL
  26.    
  27. FETCH NEXT FROM ProjectOID_Cursor
  28. INTO @ProjectOID
  29. END
  30. CLOSE ProjectOID_Cursor
  31. DEALLOCATE ProjectOID_Cursor
  32.  
  33. --- Step#3
  34. -- Run this script in a different window.
  35. -- The results are stored into a table ProjectOID_Temp2. Truncate this table to start once again.
  36. DEClARE @ProjectOID as nvarchar (100)
  37. DECLARE @TaskOID as nvarchar (100)
  38. DECLARE @retTable TABLE (
  39.   TaskOID nvarchar(100),
  40.   TaskResourceOID nvarchar(100),
  41.   EvUserOID nvarchar(100)
  42. )
  43. DECLARE TaskOID_Cursor CURSOR FOR
  44. SELECT  TaskOID FROM ProjectOID_Temp
  45. OPEN TaskOID_Cursor
  46. FETCH NEXT FROM TaskOID_Cursor INTO @TaskOID
  47. WHILE @@FETCH_STATUS = 0
  48. BEGIN
  49.     INSERT INTO @retTable
  50.       SELECT @TaskOID, t1.OID as taskResourceOID, t2.OID as EvUserOID
  51.     FROM (select OID, resourceOID from taskresourcehours
  52.     where projecttaskoid =   @TaskOID) as t1,
  53.     (
  54.      select OID, workerOID
  55.      from Evuser
  56.      where workerOID in
  57.       ( select resourceOID from taskresourcehours where projecttaskoid = @TaskOID )
  58.     ) as t2
  59.     WHERE t1.resourceOID = t2.workerOID
  60. FETCH NEXT FROM TaskOID_Cursor
  61. INTO @TaskOID
  62. END
  63. CLOSE TaskOID_Cursor
  64. DEALLOCATE TaskOID_Cursor
  65. INSERT INTO ProjectOID_Temp2
  66. SELECT * FROM @retTable
  67.  
  68. --- Step#4 stop Primavera service
  69.  
  70. -- Step#5 Final Update. Backup the database before running this.
  71. -- Run this in a separate query explorer window.
  72.  
  73. --DECLARE @ProjectOID as nvarchar (100)
  74. DECLARE @TaskOID as nvarchar (100)
  75. DECLARE @TaskResourceOID as nvarchar (100)
  76. DECLARE @EvResourceOID as nvarchar (100)
  77.  
  78. DECLARE UpdateOID_Cursor CURSOR FOR
  79. SELECT TaskOID, TaskResourceOID, EvResourceOID FROM ProjectOID_Temp2
  80. OPEN UpdateOID_Cursor
  81. FETCH NEXT FROM UpdateOID_Cursor INTO @TaskOID, @TaskResourceOID, @EvResourceOID
  82. WHILE @@FETCH_STATUS = 0
  83. BEGIN
  84.     UPDATE  taskresourcehours
  85.     SET    lActualHours = ( SELECT SUM(minutes)
  86.                          FROM   timesheetcell
  87.                          WHERE  timesheetrowOID in (
  88.                                 SELECT  OID
  89.                                 FROM    timesheetrow
  90.                                 WHERE   projecttaskOID = @TaskOID
  91.                                         AND timereportoid in (
  92.                                         SELECT  OID
  93.                                         FROM    timereport
  94.                                         WHERE   userOID = @EvResourceOID ) )
  95.                        ) / 60 * 10000
  96.     WHERE   OID = @TaskResourceOID
  97. FETCH NEXT FROM UpdateOID_Cursor
  98. INTO @TaskOID, @TaskResourceOID, @EvResourceOID
  99. END
  100. CLOSE UpdateOID_Cursor
  101. DEALLOCATE UpdateOID_Cursor
Advertisement
Add Comment
Please, Sign In to add comment