Advertisement
Guest User

Untitled

a guest
Jun 21st, 2017
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 6.60 KB | None | 0 0
  1.  
  2. IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetWeldsByNdtRuleId]'))
  3. DROP PROCEDURE [dbo].[GetWeldsByNdtRuleId]
  4. GO
  5.  
  6. CREATE PROCEDURE GetWeldsByNdtRuleId
  7. @RuleId Uniqueidentifier
  8. AS
  9. BEGIN
  10. DECLARE @Welds TABLE (WeldId Uniqueidentifier)
  11. DECLARE @WeldId Uniqueidentifier
  12. DECLARE @HasPassed Bit
  13.  
  14. DECLARE cur CURSOR LOCAL FOR SELECT WeldId FROM Weld --WHERE WeldCompletedDate IS NOT NULL AND ExcludeFromLotCheck <> 1
  15. OPEN cur
  16. FETCH NEXT FROM cur INTO @WeldId
  17.  
  18. WHILE @@FETCH_STATUS = 0
  19. BEGIN
  20. EXEC CheckWeldAgainstRule @WeldId, @RuleId, @HasPassed OUTPUT
  21. IF (@HasPassed = 1)
  22. INSERT INTO @Welds (WeldId) VALUES (@WeldId)
  23. FETCH NEXT FROM cur INTO @WeldId
  24. END
  25.  
  26. SELECT * FROM Weld WHERE WeldId IN (SELECT WeldId FROM @Welds)
  27. END
  28. GO
  29.  
  30. IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[CheckWeldAgainstRule]'))
  31. DROP PROCEDURE [dbo].[CheckWeldAgainstRule]
  32. GO
  33.  
  34. CREATE PROCEDURE CheckWeldAgainstRule
  35. @WeldId Uniqueidentifier,
  36. @RuleId Uniqueidentifier,
  37. @HasPassed Bit OUTPUT
  38. AS
  39. BEGIN
  40.  
  41. DECLARE @Conditions TABLE (
  42. ConditionId Uniqueidentifier,
  43. Section Varchar(50),
  44. Field VarChar(50),
  45. ConditionType Varchar(50),
  46. ConditionValue Varchar(Max),
  47. BasedOnField Varchar(50),
  48. BasedOnCondition Varchar(50),
  49. BasedOnValue Varchar(Max),
  50. RuleSet Int,
  51. HasPassed Int
  52. )
  53.  
  54. INSERT INTO @Conditions
  55. SELECT NdtRuleConditionId, SectionName, F1.FieldName, C1.ConditionName, ConditionValue, F2.FieldName, C2.ConditionName, BasedOnValue, RuleSet, 0
  56. FROM NdtRuleCondition
  57. INNER JOIN DatasheetSection ON DatasheetSection.SectionId = NdtRuleCondition.SectionId
  58. INNER JOIN DatasheetField F1 ON F1.FieldId = NdtRuleCondition.FieldId
  59. LEFT JOIN DatasheetField F2 ON F2.FieldId = NdtRuleCondition.BasedonFieldId
  60. INNER JOIN ConditionType C1 ON C1.ConditionTypeId = NdtRuleCondition.ConditionTypeId
  61. LEFT JOIN ConditionType C2 ON C2.ConditionTypeId = NdtRuleCondition.BasedOnConditionId
  62. WHERE NdtRuleId = @RuleId
  63.  
  64. DECLARE @ConditionId Uniqueidentifier
  65. DECLARE @Section Varchar(50)
  66. DECLARE @Field VarChar(50)
  67. DECLARE @Condition Varchar(50)
  68. DECLARE @Value Varchar(Max)
  69. DECLARE @BasedOnField Varchar(50)
  70. DECLARE @BasedOnCondition Varchar(50)
  71. DECLARE @BasedOnValue Varchar(Max)
  72.  
  73. DECLARE cur CURSOR LOCAL FOR SELECT ConditionId, Section, Field, ConditionType, ConditionValue, BasedOnField, BasedOnCondition, BasedOnValue FROM @Conditions
  74. OPEN cur
  75. FETCH NEXT FROM cur INTO @ConditionId, @Section, @Field, @Condition, @Value, @BasedOnField, @BasedOnCondition, @BasedOnValue
  76.  
  77. WHILE @@FETCH_STATUS = 0
  78. BEGIN
  79. EXEC CheckRuleCondition @WeldId, @Section, @Field, @Condition, @Value, @BasedOnField, @BasedOnCondition, @BasedOnValue, @HasPassed OUTPUT
  80. UPDATE @Conditions SET HasPassed = @HasPassed WHERE ConditionId = @ConditionId
  81. FETCH NEXT FROM cur INTO @WeldId, @Section, @Field, @Condition, @Value, @BasedOnField, @BasedOnCondition, @BasedOnValue
  82. END
  83.  
  84. CLOSE cur
  85. DEALLOCATE cur
  86.  
  87. SET @HasPassed = CASE WHEN EXISTS (SELECT RuleSet FROM @Conditions GROUP BY RuleSet HAVING MIN(HasPassed) <> 0) THEN 1 ELSE 0 END
  88. END
  89. GO
  90.  
  91. IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[CheckRuleCondition]'))
  92. DROP PROCEDURE [dbo].[CheckRuleCondition]
  93. GO
  94.  
  95. CREATE PROCEDURE CheckRuleCondition
  96. @WeldId Uniqueidentifier,
  97. @Section Varchar(50),
  98. @Field Varchar(50),
  99. @Condition Varchar(50),
  100. @ExpectedValue Varchar(Max),
  101. @BasedOnField Varchar(50),
  102. @BasedOnCondition Varchar(50),
  103. @BasedOnValue Varchar(Max),
  104. @HasPassed Bit OUTPUT
  105. AS
  106. BEGIN
  107.  
  108. DECLARE @SqlQuery NVarchar(4000)
  109. DECLARE @ActualValue Varchar(Max)
  110. DECLARE @Values TABLE ( ActualValue Varchar(Max) )
  111.  
  112. IF (@Section IN ('Welder', 'Filler'))
  113. SET @SqlQuery = 'INSERT INTO @Values SELECT DISTINCT ' + @Field + ' FROM ' + @Section + ', Pass WHERE Pass.WeldId = Weld.WeldId AND Weld.WeldId = @WeldId';
  114. ELSE
  115. SET @SqlQuery = 'SELECT TOP 1 @ActualValue = ' + @Field + ' FROM ' + @Section + ' WHERE WeldId = @WeldId';
  116.  
  117. IF (@BasedOnField IS NOT NULL AND @BasedOnCondition = 'Minimum')
  118. SET @SqlQuery = @SqlQuery + ' AND ' + @BasedOnField + ' = Min(' + @BasedOnField + ')'
  119. ELSE IF (@BasedOnField IS NOT NULL AND @BasedOnCondition = 'Maximum')
  120. SET @SqlQuery = @SqlQuery + ' AND ' + @BasedOnField + ' = Max(' + @BasedOnField + ')'
  121. ELSE IF (@BasedOnField IS NOT NULL AND @BasedOnCondition = 'Equals')
  122. SET @SqlQuery = @SqlQuery + ' AND ' + @BasedOnField + ' = @BasedOnValue'
  123.  
  124. EXEC sp_executesql @SqlQuery, N'@WeldId Uniqueidentifier, @BasedOnValue Varchar(4000), @ActualValue Varchar(4000) OUTPUT', @Weldid, @BasedOnValue, @ActualValue OUTPUT
  125.  
  126. IF (@Section IN('Welder', 'Filler'))
  127. BEGIN
  128.  
  129. DECLARE cur CURSOR LOCAL FOR SELECT ActualValue FROM @Values
  130. OPEN cur
  131. FETCH NEXT FROM cur INTO @ActualValue
  132. WHILE @@FETCH_STATUS = 0
  133. BEGIN
  134. BEGIN TRY
  135. SET @HasPassed = dbo.CompareValues(@ActualValue, @ExpectedValue, @Condition)
  136. END TRY
  137. BEGIN CATCH
  138. SET @HasPassed = 0
  139. END CATCH
  140. IF (@HasPassed = 0)
  141. FETCH NEXT FROM cur INTO @ActualValue
  142. END
  143. CLOSE cur
  144. DEALLOCATE cur
  145. END
  146.  
  147. ELSE
  148. BEGIN TRY
  149. SET @HasPassed = dbo.CompareValues(@ActualValue, @ExpectedValue, @Condition)
  150. END TRY
  151. BEGIN CATCH
  152. SET @HasPassed = 0
  153. END CATCH
  154. END
  155. GO
  156.  
  157. IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[CompareValues]'))
  158. DROP FUNCTION CompareValues
  159. GO
  160.  
  161. CREATE FUNCTION CompareValues (@ActualValue Varchar(Max), @ExpectedValue Varchar(Max), @Condition Varchar(50))
  162. RETURNS Bit
  163. AS
  164. BEGIN
  165. SET @ActualValue = LTRIM(RTRIM(LOWER(@ActualValue)))
  166. SET @ExpectedValue = LTRIM(RTRIM(LOWER(@ExpectedValue)))
  167.  
  168. RETURN CASE
  169. WHEN @Condition = 'Equals' AND @ActualValue = @ExpectedValue THEN 1
  170. WHEN @Condition = 'Not Equal' AND @ActualValue <> @ExpectedValue THEN 1
  171. WHEN @Condition = 'Greater Than' AND @ActualValue > @ExpectedValue THEN 1
  172. WHEN @Condition = 'Greater Than or Equal' AND @ActualValue >= @ExpectedValue THEN 1
  173. WHEN @Condition = 'Less Than' AND @ActualValue < @ExpectedValue THEN 1
  174. WHEN @Condition = 'Less Than or Equal' AND @ActualValue <= @ExpectedValue THEN 1
  175. WHEN @Condition = 'Contains' AND @ActualValue LIKE '%' + @ExpectedValue + '%' THEN 1
  176. WHEN @Condition = 'Does Not Contain' AND @ActualValue NOT LIKE '%' + @ExpectedValue + '%' THEN 1
  177. WHEN @Condition = 'Starts With' AND @ActualValue LIKE '%' + @ExpectedValue THEN 1
  178. WHEN @Condition = 'Ends With' AND @ActualValue LIKE @ExpectedValue + '%' THEN 1
  179. WHEN @Condition = 'Is One Of' AND ',' + @ExpectedValue + ',' LIKE '%,' + @ActualValue + ',%' THEN 1
  180. WHEN @Condition = 'Is Not One Of' AND ',' + @ExpectedValue + ',' NOT LIKE '%,' + @ActualValue + ',%' THEN 1
  181. WHEN @Condition = 'Has Any Value' AND @ActualValue IS NOT NULL THEN 1
  182. ELSE 0 END
  183. END
  184. GO
  185.  
  186. EXEC GetWeldsByNdtRuleId '1227862D-6337-429E-9C07-2DC9CA0FF5BE'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement