Advertisement
Guest User

Untitled

a guest
Apr 4th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 4.44 KB | None | 0 0
  1. ---------------------------------------------------------------------------------------------------
  2. -- Corrupted data Case 1
  3. -- Missing lot for non-contracts
  4.  
  5. SELECT
  6.     i2.id answerId, m.id requirementId, i2.TenderId
  7.         INTO #OrphanAnswers
  8.     FROM requirement m
  9.         INNER JOIN document i1 ON m.documentId=i1.id
  10.         INNER JOIN answer i2 ON m.id = i2.requirementid
  11.     WHERE
  12.         m.lotid IS null         -- orphan requirement
  13.         AND i1.documentType<>2  -- not contract
  14.  
  15. /*
  16. SELECT * FROM Requirement WHERE id IN (SELECT requirementid FROM #OrphanAnswers)
  17.  
  18. SELECT top 100 * FROM AnswerRow WHERE answerid in (SELECT answerId FROM #OrphanAnswers)
  19.  
  20. -- tenders without any other answers
  21. SELECT
  22.     m.tenderId, count(l1.id) cnt
  23.     FROM #orphanAnswers m
  24.         LEFT JOIN answer l1
  25.             ON l1.tenderId=m.tenderId and l1.id<>m.answerId
  26.     GROUP BY m.tenderId
  27.     ORDER BY cnt
  28.  
  29. -- Check if all answers are from simulated tenders
  30. SELECT * FROM Tender
  31.     WHERE id IN (SELECT distinct tenderId FROM #OrphanAnswers)
  32.         AND IsSimulated=0
  33. */
  34.  
  35. DELETE FROM AnswerRow WHERE answerid in (SELECT answerId FROM #OrphanAnswers)
  36. DELETE FROM Answer WHERE id IN (SELECT answerId FROM #OrphanAnswers)
  37.  
  38. DROP TABLE #OrphanAnswers
  39. ---------------------------------------------------------------------------------------------------
  40. -- Corrupted data Case 2
  41. -- Missing tender lot for non-contracts
  42.  
  43. -- Expected 39
  44. SELECT 
  45.     -- top 1000 *
  46.     m.id as answerId INTO #CorruptedSimAnswers
  47. FROM dbo.Answer m
  48.     INNER JOIN Requirement i1 ON i1.Id = m.RequirementId
  49.     INNER JOIN Document i2 ON i1.DocumentId = i2.Id
  50.     INNER JOIN Tender i3 ON m.TenderId = i3.id
  51. WHERE
  52.     NOT EXISTS(select top 1 1 FROM TenderLot where TenderId=m.TenderId and lotid=i1.LotId)
  53.     AND DocumentType<>2
  54.     AND i3.IsSimulated=1
  55.  
  56. DELETE FROM ObjectFile WHERE answerId in (select AnswerId from #CorruptedSimAnswers)
  57. DELETE FROM AnswerRow where AnswerId in (select AnswerId from #CorruptedSimAnswers)
  58. DELETE FROM Answer where Id in (select AnswerId from #CorruptedSimAnswers)
  59.  
  60. DROP TABLE #CorruptedSimAnswers
  61.  
  62. ---------------------------------------------------------------------------------------------------
  63. -- Corrupted data Case 3
  64. -- Missing tender lot for non-contracts, Project Id missmatch in Document and Tender
  65.  
  66. -- Expected 257
  67. SELECT 
  68.     -- top 1000 *
  69.     m.id as answerId INTO #ObsoleteAnswers
  70. FROM dbo.Answer m
  71.     INNER JOIN Requirement i1 ON i1.Id = m.RequirementId
  72.     INNER JOIN Document i2 ON i1.DocumentId = i2.Id
  73.     INNER JOIN Tender i3 ON m.TenderId = i3.id
  74. WHERE
  75.     NOT EXISTS(select top 1 1 FROM TenderLot where TenderId=m.TenderId and lotid=i1.LotId)
  76.     AND DocumentType<>2
  77.     AND i2.ProjectId <> i3.ProjectId AND i3.IsSimulated=0       -- 257 not simulated, project differs
  78.     AND len(i3.externalid)=36   -- Contract tender
  79.  
  80.  
  81. DELETE FROM AnswerRow where AnswerId in (select AnswerId from #ObsoleteAnswers)
  82. DELETE FROM Answer where Id in (select AnswerId from #ObsoleteAnswers)
  83.  
  84. DROP TABLE #ObsoleteAnswers
  85.  
  86.  
  87. ---------------------------------------------------------------------------------------------------
  88. -- Corrupted data Case 4
  89. -- Contract requirements without Lots
  90.  
  91. -- Expected 64351
  92. UPDATE i2
  93.     SET
  94.         LotId = (SELECT TOP 1 Id FROM lot WHERE ProjectId=i1.ProjectId)
  95.     FROM answer m
  96.         INNER JOIN tender i1 ON m.TenderId=i1.id
  97.         INNER JOIN Requirement i2 ON m.RequirementId=i2.id
  98.         INNER JOIN Document i3 ON i2.DocumentId=i3.id
  99.     WHERE
  100.         LEN(i1.ExternalId)=36
  101.         AND i2.LotId is null
  102.         AND i3.DocumentType=2
  103.         AND EXISTS(SELECT TOP 1 1 FROM lot WHERE ProjectId=i1.ProjectId)
  104.  
  105. ---------------------------------------------------------------------------------------------------
  106. -- Create tender lots for contracts
  107.  
  108. -- Expected 19214
  109. INSERT INTO TenderLot(
  110.     TenderId, LotId,
  111.     TenderSum, ComparisonSum,
  112.     UnansweredCount, MissedMandatoryCount, RequirementsCount,
  113.     CreatedOn, ModifiedOn,
  114.     [Enabled])
  115. SELECT
  116.     m.id, i1.id,
  117.     null, null,
  118.     0,0,0,
  119.     getutcdate(), getutcdate(),
  120.     1  
  121.     FROM tender m
  122.     INNER JOIN lot i1 ON m.ProjectId=i1.ProjectId
  123.         WHERE LEN(m.ExternalId)=36                              -- is contract
  124.             AND EXISTS (SELECT TOP 1 1 FROM Answer sm
  125.                 INNER JOIN Requirement si1 ON sm.RequirementId=si1.id
  126.                     WHERE sm.TenderId=m.id AND si1.LotId=i1.Id) -- tender has answers for lot
  127.  
  128.  
  129. /*
  130. -- This must return 0 after above queries were executed
  131. SELECT
  132.     count(1)
  133.     -- top 100 *
  134. FROM dbo.Answer A
  135. INNER JOIN Requirement R ON R.Id = A.RequirementId
  136. WHERE
  137.     NOT EXISTS(SELECT TOP 1 1 FROM TenderLot TL WHERE TL.TenderId = A.TenderId AND R.LotId = Tl.LotId)
  138. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement