--https://stackoverflow.com/questions/13757387/getting-sql-server-cross-database-dependencies 변형
alter PROCEDURE [dbo].[get_crossdatabase_dependencies] AS
SET NOCOUNT ON;
CREATE TABLE #databases(
database_id int,
database_name sysname
);
INSERT INTO #databases(database_id, database_name)
SELECT database_id, [name]
FROM sys.databases
WHERE 1 = 1
AND [state] <> 6 /* ignore offline DBs */
AND database_id > 4; /* ignore system DBs */
DECLARE
@database_id int,
@database_name sysname,
@sql varchar(max),
@sql2 varchar(max);
CREATE TABLE #dependencies(
referencing_database varchar(max),
referencing_schema varchar(max),
referencing_object_name varchar(max),
referenced_server varchar(max),
referenced_database varchar(max),
referenced_schema varchar(max),
referenced_object_name varchar(max)
);
CREATE TABLE #objtype(
database_name varchar(max),
obj_name varchar(max),
obj_type varchar(100)
);
WHILE (SELECT COUNT(*) FROM #databases) > 0 BEGIN
SELECT TOP 1 @database_id = database_id,
@database_name = database_name
FROM #databases;
SET @sql = 'INSERT INTO #dependencies select
DB_NAME(' + convert(varchar,@database_id) + '),
OBJECT_SCHEMA_NAME(referencing_id,'
+ convert(varchar,@database_id) +'),
OBJECT_NAME(referencing_id,' + convert(varchar,@database_id) + '),
referenced_server_name,
ISNULL(referenced_database_name, db_name('
+ convert(varchar,@database_id) + ')),
referenced_schema_name,
referenced_entity_name
FROM ' + quotename(@database_name) + '.sys.sql_expression_dependencies'
set @sql2= 'insert into #objtype select DB_NAME('
+ convert(varchar,@database_id) + '),name,type_desc from '
+ quotename(@database_name) + '.sys.objects where type_desc
in (''SQL_SCALAR_FUNCTION'',''SQL_STORED_PROCEDURE'',''SQL_TABLE_VALUED_FUNCTION'',''USER_TABLE'',''VIEW'')'
EXEC(@sql);
EXEC(@sql2);
DELETE FROM #databases WHERE database_id = @database_id;
END;
SET NOCOUNT OFF;
SELECT a.referencing_database , a.referencing_schema , a.referencing_object_name , b.obj_type, a.referenced_server , a.referenced_database , a.referenced_schema , a.referenced_object_name , C.obj_type FROM #dependencies A
left join #objtype B on a.referencing_database=b.database_name and a.referencing_object_name=b.obj_name
left join #objtype C on a.referenced_database=C.database_name and a.referenced_object_name=C.obj_name
where a.referenced_database !=a.referencing_database and referenced_server is NULL
/*
SELECT * FROM #dependencies A
SELECT * FROM #objtype B
SELECT a.referencing_database , a.referencing_schema , a.referencing_object_name , b.obj_type, a.referenced_server , a.referenced_database , a.referenced_schema , a.referenced_object_name , C.obj_type FROM #dependencies A
left join #objtype B on a.referencing_database=b.database_name and a.referencing_object_name=b.obj_name
left join #objtype C on a.referenced_database=C.database_name and a.referenced_object_name=C.obj_name
*/