db中有很多表和sp.我找到了特定sp(存储过程)中使用的表名.
sp_depends %sp_name%没有给出欲望的结果.我也用过INFORMATION_SCHEMA.TABLES,INFORMATION_SCHEMA.ROUTINES桌子.
但结果并没有完全满足我的要求.
SQL Server版本 - 2008 R2
我正在评估DMS解决方案,目的是接管维护.原始解决方案有一个中央数据库,其中包含与制造商有关的数据.它还为每个经销商提供了一个数据库,这意味着存在许多跨数据库依赖关系.
问题:
作为第一步,我建议彻底清理数据库,因此了解对象依赖关系(包括跨数据库依赖关系)至关重要.我尝试使用Red Gate的解决方案,但输出太大了.我想要的只是数据库中没有任何依赖关系的对象列表 - 它们既不依赖于其他对象,也不依赖于它们的任何对象.
这是我用来获取依赖项列表的脚本:
SELECT
DB_NAME() referencing_database_name,
OBJECT_NAME (referencing_id) referencing_entity_name,
ISNULL(referenced_schema_name,'dbo') referenced_schema_name,
referenced_entity_name,
ao.type_desc referenced_entity_type,
ISNULL(referenced_database_name,DB_NAME()) referenced_database_name
FROM sys.sql_expression_dependencies sed
JOIN sys.all_objects ao
ON sed.referenced_entity_name = ao.name
Run Code Online (Sandbox Code Playgroud)
我将创建一个表 - 依赖项 - 我将从每个数据库中插入此结果集.下一步,我还将创建另一个表 - AllObjects-,它将包含数据库中所有对象的列表.这是执行此操作的脚本:
SELECT
DB_NAME() DBName,
name,
type_desc
FROM sys.all_objects
WHERE type_desc IN
(
'VIEW',
'SQL_TABLE_VALUED_FUNCTION',
'SQL_STORED_PROCEDURE',
'SQL_INLINE_TABLE_VALUED_FUNCTION',
'USER_TABLE',
'SQL_SCALAR_FUNCTION'
)
Run Code Online (Sandbox Code Playgroud)
现在,此表中的名称列表未出现在依赖项表的referenced_entity_name列中,但应该提供我正在查找的对象列表.
SELECT
AO.DBName,
AO.name,
AO.type_desc
FROM AllObjects AO
LEFT OUTER JOIN Dependencies D ON …Run Code Online (Sandbox Code Playgroud)