这种情况是,在我要检查的数据库中,有一个存档表可以保留用户历史记录,并且有一个触发器或存储过程,一段时间后从该表中删除行,以避免同样,我没有设计DB,我只是在维护使用此数据库的应用程序的维护或触发,检查代码并将其修改,以将此“用户历史记录”留在表格上。

有人告诉我检查“ sysobjects”表,在那里我可以看到与表格相同名称的东西,但这是我唯一能够检索的信息吗?

谢谢你。

有帮助吗?

解决方案

使用 sys.sql_modules

SELECT OBJECT_NAME(object_id)
FROM sys.sql_modules sm
WHERE definition LIKE '%Mytable%'

或使用 红门SQL搜索 这是完全免费的

不要 使用syscomments或information_schema.rubbish

其他提示

试用 ApexSQL搜索

ApexSQL搜索是一个免费的SQL Server Management Studio和Visual Studio加载项,除其他功能外,还具有视图依赖项功能。视图依赖项功能能够可视化所有SQL数据库对象的关系,包括加密对象和系统对象之间的关系,SQL Server 2012特定对象以及存储在使用透明数据加密(TDE)加密的数据库中的对象。

视图依赖项功能还允许您设置和自定义视觉依赖图图的布局,包括将要呈现的关系,生成图的布局和大小以及依赖关系的钻井深度

免责声明:我在ApexSQL担任支持工程师

供将来参考截至2008年,还可以使用DMV。 sys.dm_sql_referencing_entities. 。我通常更喜欢使用sql_modules,因为它避免了误报。我讨论了 这里 但是基本上,如果您有这样的代码:

SELECT OBJECT_SCHEMA_NAME(object_id), OBJECT_NAME(object_id) 
FROM sys.sql_modules WHERE [definition] LIKE '%ABC%'

您最终将获得表ABC的结果,表ABClog视图vw_abc,存储的过程sp_update_abc等。据我所知,DMV将处理加密的SP,并且未加密的SQL_MODULES只能与未加密的SPS一起工作,而无需加密的SPS。 。

同一查询的DMV版本是:

SELECT * FROM sys.dm_sql_referencing_entities('dbo.ABC', 'OBJECT')

您也可以使用 sys.sql_expression_depentencies 目录视图。使用此查询:

SELECT 
referencing_object_name = obj.name, 
referencing_object_type_desc = obj.type_desc, 
referenced_object_name = referenced_entity_name
FROM sys.sql_expression_dependencies sd 
INNER JOIN sys.objects obj 
ON sd.referencing_id = obj.[object_id] 
WHERE referenced_entity_name = 'MyTable'
许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top