Answers:
使用sys.sql_modules搜索所有代码
SELECT OBJECT_NAME(object_id)
FROM sys.sql_modules sm
WHERE definition LIKE '%Mytable%'
或使用完全免费的Red Gate SQL搜索
不要使用syscomments或INFORMATION_SCHEMA.RUBBISH
syscomments
对于超过4000个字符数限制的对象有多行,使使用它的查询与一样有效sys.sql_modules
。sys.sql_modules
但由于syscomments
折旧,我仍然建议。
ApexSQL Search是一个免费的SQL Server Management Studio和Visual Studio加载项,除其他功能外,还具有View Dependencies功能。View Dependencies功能具有可视化所有SQL数据库对象的关系的能力,包括加密对象和系统对象,SQL Server 2012特定对象以及存储在使用透明数据加密(TDE)加密的数据库中的对象之间的关系。
View Dependencies功能还允许您设置和自定义可视化依赖关系图的布局,包括将要呈现的关系,所生成图的布局和大小以及依赖关系的向下钻取深度
免责声明:我是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和未加密的SP,而sql_modules方法仅适用于未加密的SP。 。
相同查询的DMV版本是这样的:
SELECT * FROM sys.dm_sql_referencing_entities('dbo.ABC', 'OBJECT')
您也可以使用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'