在本文中,我想分享一些重要的搜索,例如搜索存储过程中使用的表以及搜索存储过程中使用的表和视图的列表。
1)列出包含表的存储过程。
SELECT DISTINCT syso.name FROM syscomments sysc INNER JOIN sysobjects syso ON sysc.id= syso.id WHERE sysc.TEXT LIKE '%tablename%' and upper(xtype)='P'
在这里,此查询将使用给定的表返回所有存储过程。
注意:在上面的查询中,将表名替换为:tablename。
什么是syscomments对象?
视图,规则,默认值,触发器,CHECK约束,DEFAULT约束和存储过程的实际代码存储在syscomments表中。 syscomments表中的TEXT列包含所有这些对象的实际代码。 知道这一点后,您就可以编写一些简单的T-SQL代码,这些代码可以扫描syscomments表以查找我们想要搜索的实际表列名或数据库对象名。
2)列出存储过程中使用的表。
从sysobjects中选择名称,其中id在
(select sd.depid from sysobjects so, sysdepends sd
where so.name = 'usp_Your_Stored_Procedure' and sd.id = so.id ) and upper(xtype) = 'U'
该语句将列出给定存储过程中使用的所有表。
(在我们的示例中,其为“ usp_Your_Stored_Procedure”)
注意:这将仅返回此过程中使用的表。
如果您还想获取视图,则必须使用以下查询。
select name from sysobjects where id in
(select sd.depid from sysobjects so, sysdepends sd
where so.name = 'usp_getRepReport_by_OU' and sd.id = so.id ) and upper(xtype) in ('U','V')
我希望这有助于调试作为支持开发人员的较大的现有应用程序。
谢谢
巴拉斯·雷迪VasiReddy
高级软件工程师(RBC)
From: https://bytes.com/topic/sql-server/insights/889408-important-sql-server-statements-searchs