我有各种数据库,并且要确保删除的是真正孤立的东西(在这种情况下为视图)。是要使用的正确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
…很近。我得到了我所知道的正在使用视图的存储过程的主体,但是我在获取实际过程名称时遇到了麻烦。
您只有一个选择。
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会被截断。