Tuesday, 7 July 2015

To get all list of all script objects (VIEWs, SPs, UDFs) which are depending on some other script object we can use help of sys.sql_expression_dependencies system view:

  1. SELECT
  2. object_name = OBJECT_NAME(D.referencing_id),
  3. O.type,
  4. O.type_desc
  5. FROM
  6. sys.sql_expression_dependencies D
  7. INNER JOIN sys.objects O ON D.referencing_id = O.object_id
  8. WHERE
  9. referenced_entity_name LIKE 'MyStoredProcedure';

Query result looks like this:



Now we can extend this query with navigation through all databases and save it as T-SQL Query Template:

  1. DECLARE
  2. @referenced_entity SYSNAME = '<referenced_entity, sysname, ???>',
  3. @referencing_entity SYSNAME = '<referencing_entity, sysname, %>',
  4. @sql NVARCHAR(MAX) = '
  5. SELECT
  6. server_name=NULL,
  7. database_name=NULL,
  8. object_name=NULL,
  9. object_type=NULL,
  10. object_type_desc=NULL
  11. WHERE 1=0';
  12.  
  13. SELECT @sql = @sql + REPLACE(REPLACE(REPLACE(REPLACE('
  14. UNION ALL
  15. SELECT
  16. server_name = @@SERVERNAME,
  17. database_name = ''{database_name}'',
  18. object_name = OBJECT_NAME(D.referencing_id, {database_id}),
  19. object_type = O.type,
  20. object_type_desc = O.type_desc
  21. FROM
  22. {database_name}.sys.sql_expression_dependencies D
  23. INNER JOIN {database_name}.sys.objects O ON D.referencing_id = O.object_id
  24. WHERE
  25. D.referenced_entity_name LIKE ''{referenced_entity}''
  26. AND
  27. OBJECT_NAME(D.referencing_id, {database_id}) LIKE ''{referencing_entity}''',
  28. '{database_id}', database_id),
  29. '{database_name}', name),
  30. '{referenced_entity}', @referenced_entity),
  31. '{referencing_entity}', @referencing_entity)
  32. FROM sys.databases
  33. WHERE state=0 /* ONLINE */
  34. ORDER BY name;
  35.  
  36. SET @sql = @sql + '
  37. ';
  38.  
  39. EXEC(@sql);



See also MSSQL - Query Templates

No comments:

Post a Comment

Note: only a member of this blog may post a comment.