admin

查找所有参考资料以进行查看

sql

我有各种数据库,并且要确保删除的是真正孤立的东西(在这种情况下为视图)。是要使用的正确SQL:

SELECT r.routine_name, 
       r.routine_definition
  FROM INFORMATION_SCHEMA.ROUTINES r
 WHERE r.routine_definition LIKE '%my_view_name%'

问题在于这些引用没有在存储过程中获取声明,我不知道还有什么。

我找到了我记得的SO问题,但这也无济于事。这:

SELECT t.*
  FROM SYSCOMMENTS t
 WHERE CHARINDEX('my_view_name', t.text) > 0

…很近。我得到了我所知道的正在使用视图的存储过程的主体,但是我在获取实际过程名称时遇到了麻烦。


阅读 158

收藏
2021-05-10

共1个答案

admin

您只有一个选择。

select
    object_name(m.object_id), m.*
from
    sys.sql_modules m
where
    m.definition like N'%my_view_name%'

syscomments和INFORMATION_SCHEMA.routine具有nvarchar(4000)列。因此,如果在位置3998处使用“
myViewName”,则不会找到它。syscomments确实有多行,但是ROUTINES会被截断。

2021-05-10