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.