- SELECT
- object_name = OBJECT_NAME(D.referencing_id),
- O.type,
- O.type_desc
- FROM
- sys.sql_expression_dependencies D
- INNER JOIN sys.objects O ON D.referencing_id = O.object_id
- WHERE
- 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:
- DECLARE
- @referenced_entity SYSNAME = '<referenced_entity, sysname, ???>',
- @referencing_entity SYSNAME = '<referencing_entity, sysname, %>',
- @sql NVARCHAR(MAX) = '
- SELECT
- server_name=NULL,
- database_name=NULL,
- object_name=NULL,
- object_type=NULL,
- object_type_desc=NULL
- WHERE 1=0';
- SELECT @sql = @sql + REPLACE(REPLACE(REPLACE(REPLACE('
- UNION ALL
- SELECT
- server_name = @@SERVERNAME,
- database_name = ''{database_name}'',
- object_name = OBJECT_NAME(D.referencing_id, {database_id}),
- object_type = O.type,
- object_type_desc = O.type_desc
- FROM
- {database_name}.sys.sql_expression_dependencies D
- INNER JOIN {database_name}.sys.objects O ON D.referencing_id = O.object_id
- WHERE
- D.referenced_entity_name LIKE ''{referenced_entity}''
- AND
- OBJECT_NAME(D.referencing_id, {database_id}) LIKE ''{referencing_entity}''',
- '{database_id}', database_id),
- '{database_name}', name),
- '{referenced_entity}', @referenced_entity),
- '{referencing_entity}', @referencing_entity)
- FROM sys.databases
- WHERE state=0 /* ONLINE */
- ORDER BY name;
- SET @sql = @sql + '
- ';
- EXEC(@sql);
See also MSSQL - Query Templates
No comments:
Post a Comment
Note: only a member of this blog may post a comment.