【发布时间】:2015-07-25 04:51:19
【问题描述】:
我在数据库中有一个表。表的字段正在被其他表中的某个存储过程更新。有没有可能我可以找到作用于特定表的存储过程???
【问题讨论】:
标签: sql-server stored-procedures sql-server-2012
我在数据库中有一个表。表的字段正在被其他表中的某个存储过程更新。有没有可能我可以找到作用于特定表的存储过程???
【问题讨论】:
标签: sql-server stored-procedures sql-server-2012
如果您想知道哪些存储过程可能会触及您的表,您可以在 sys.procedures 中搜索以下内容:
select * from sys.procedures
where object_definition(object_id) like '%tablename%'
-- or probe information_schema
select * from information_schema.routines
where routine_definition like '%tablename%'
Object_Definition
返回指定对象定义的 Transact-SQL 源文本。 https://msdn.microsoft.com/en-us/library/ms176090(v=sql.105).aspx
当我们查看 sys.procedures 时,会有一个名为 object_id 的字段。 SQL Server 中的每个对象都有一个 ID。 object_definition 将检索该对象的定义 - 在我们的例子中,将检索过程的文本。
【讨论】:
object_definition(object_id) 返回什么信息?能详细点吗?
查看sys.dm_sql_referencing_entities 视图。
但如果 SP 构建动态 SQL 来访问表(未绑定架构),这将不起作用。您可能需要使用 trace 或 SQL Profiler 来提供帮助。
【讨论】:
也许你使用这个查询。您在实际数据库中有一个列表存储过程
SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE= 'PROCEDURE'
【讨论】: