Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.35 KB | None | 0 0
  1. -- A comma-separated list of fully-qualified table names that should be marked for recompile
  2. DECLARE @ObjectRecompileList VARCHAR(MAX) = 'dbo.Table1,dbo.Table2,dbo.Proc1';
  3.  
  4. DECLARE @ObjectsToRecompile TABLE
  5. (
  6. ObjectId INT,
  7. ObjectSchema VARCHAR(1000),
  8. ObjectName VARCHAR(1000)
  9. )
  10. DECLARE @ObjectsToVerify TABLE
  11. (
  12. ObjectId INT,
  13. ObjectType VARCHAR(128),
  14. ObjectSchema VARCHAR(128),
  15. ObjectName VARCHAR(128)
  16. )
  17.  
  18. -- Generate list of objects to recompile
  19. INSERT @ObjectsToRecompile (ObjectId, ObjectSchema, ObjectName)
  20. SELECT
  21. o.object_id,
  22. s.name,
  23. o.name
  24. FROM sys.objects o
  25. JOIN sys.schemas s ON o.schema_id = s.schema_id
  26. JOIN STRING_SPLIT(@ObjectRecompileList, ',') r ON o.object_id = OBJECT_ID(r.value)
  27.  
  28. -- Generate list of all objects to verify after recompile
  29. INSERT INTO @ObjectsToVerify(ObjectId, ObjectType, ObjectSchema, ObjectName)
  30. SELECT
  31. o.object_id,
  32. CASE
  33. WHEN o.Type = 'FN' THEN 'Scalar Function'
  34. WHEN o.Type = 'IF' THEN 'Inline Table-Valued Function'
  35. WHEN o.Type = 'P' THEN 'Stored Procedure'
  36. WHEN o.Type = 'TF' THEN 'Table-Valued Function'
  37. WHEN o.Type = 'TR' THEN 'DML Trigger'
  38. WHEN o.Type = 'V' THEN 'View'
  39. END,
  40. s.name,
  41. o.name
  42. FROM sys.objects o
  43. JOIN sys.schemas s ON o.schema_id = s.schema_id
  44. WHERE
  45. o.Type IN ('FN', 'IF', 'P', 'TF', 'TR', 'V')
  46. AND s.name NOT IN ('temp')
  47. ORDER BY s.name, o.name
  48.  
  49. -- Loop through to mark recompilation
  50. DECLARE @LastObjectId INT;
  51. SELECT @LastObjectId = MAX(ObjectId) FROM @ObjectsToRecompile;
  52. WHILE @LastObjectId > 0
  53. BEGIN
  54.  
  55. DECLARE @sql NVARCHAR(1000);
  56. SELECT @sql = 'EXEC sp_recompile ''[' + ObjectSchema + '].[' + ObjectName + ']''' FROM @ObjectsToRecompile WHERE ObjectId = @LastObjectId;
  57. EXEC (@sql)
  58.  
  59. SELECT @LastObjectId = ISNULL(MAX(ObjectId),0) FROM @ObjectsToRecompile WHERE ObjectId < @LastObjectId;
  60.  
  61. END
  62.  
  63. -- Since sp_recompile just marks for recompile *on next proc/function run*, force recompile immediately and log errors
  64. SELECT o.ObjectType, o.ObjectSchema, o.ObjectName, e.error_message
  65. FROM @ObjectsToVerify o
  66. CROSS APPLY (SELECT error_message FROM sys.dm_exec_describe_first_result_set_for_object (o.ObjectId, NULL) WHERE error_state = 1 AND error_message LIKE 'Invalid column%') e
  67. GROUP BY o.ObjectType, o.ObjectSchema, o.ObjectName, e.error_message
  68. ORDER BY o.ObjectType, o.ObjectSchema, o.ObjectName
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement