我如何知道哪个存储过程或触发器正在使用SQL Server 2008 R2上的表?


9

就是这种情况,在我正在检查的数据库中,有一个保存用户历史记录的存档表,并且有一个触发器或存储过程,在一段时间后,从该表中删除行,以避免该表过大。同样,我没有设计数据库,我只是在维护使用该数据库的应用程序,所以我不知道这些存储过程或触发器的名称,我要做的是找到该存储过程或触发,请检查代码并对其进行修改,以使此“用户历史记录”在表上保留的时间更长。

有人告诉我检查“ sysobjects”表,在那里我实际上可以看到具有相同名称的表,但这是我唯一能够检索到的信息,有什么建议吗?

谢谢。

Answers:


6

使用sys.sql_modules搜索所有代码

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

或使用完全免费的Red Gate SQL搜索

不要使用syscomments或INFORMATION_SCHEMA.RUBBISH


研究员不能也右键单击目标表并单击“显示依赖项”(或与此相关的一些文本)吗?
Nick Chammas

@尼克·查马斯(Nick Chammas):不,这是众所周知的不可靠
gbn

@gbn,我了解syscomments是为了向后兼容,并且可以从将来的版本中删除,但是您能否详细说明为什么不使用INFORMATION_SCHEMA?thx
datagod 2011年

@datagod:与为什么syscomments总是一个差的选择一样:定义列为nvarchar(4000)。这意味着如果在字符串位置> 4000或跨越nvarchar(4000)行之间的边界(取决于您的处理方式,我想如果您真的想要的话,可以迷住它),您可能会错过表引用
gbn

@gbn实际上syscomments对于超过4000个字符数限制的对象有多行,使使用它的查询与一样有效sys.sql_modulessys.sql_modules但由于syscomments折旧,我仍然建议。
肯尼斯·费舍尔

4

试用ApexSQL搜索

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

View Dependencies功能还允许您设置和自定义可视化依赖关系图的布局,包括将要呈现的关系,所生成图的布局和大小以及依赖关系的向下钻取深度

免责声明:我是ApexSQL的支持工程师


2

为将来起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和未加密的SP,而sql_modules方法仅适用于未加密的SP。 。

相同查询的DMV版本是这样的:

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

1

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

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'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.