我们想在SQL server里面查询一个对象的存储过程可以在sysobjects表里面查询。SQL Server中的表、视图、存储过程等数据库对象信息都记录在系统表“sysobjects”中。因此,可以通过查询“sysobjects”表,显示当前数据库中的视图,系统表,用户表以及存储过程。
select * from sysobject where type='V' and type ='S' and type ='U' and type ='P'
这里V,S,U,P代表什么可以拉到最下面看表结构里面的内容。
根据存储过程名字获取对应的存储过程内容:
SELECT distinct b.name
from sysobjects a, syscomments b
where a.id = b.id and
b.xtype = 'p'
and a.text like '%xxx%' --xxx为需要查询得内容
order by name;
或者用下面的系统视图查询:
SELECT TOP 10 ir.SPECIFIC_NAME, ir.CREATED, ir.LAST_ALTERED
FROM INFORMATION_SCHEMA.ROUTINES ir
ORDER BY ir.LAST_ALTERED DESC
【栗子】:
按这个查询查询出%BOTO%的结果是在OBJECT里面:
![887463c20f43844d0fd3d97e5b30f7f3.png](https://i-blog.csdnimg.cn/blog_migrate/862cc4f0878741a8856ac7b15a109bac.jpeg)
然后查询某一条存储过程具体内容:
sp_helptext [ @objname = ] 'name'
![4ab9b66e50defe904318e19692a9e63d.png](https://i-blog.csdnimg.cn/blog_migrate/a20f486fe4a8fcca5a2c3c8d28e2a3f0.jpeg)
到这步我通常就会把这些东西都复制下来,放到notepad++里面,然后搜对应BOTO字段的具体过程。
下面是sysobjects,sys.syscomments两个表的结构:
sysobjects:
在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行。只有在 tempdb 内,每个临时对象才在该表中占一行。
![e9594fade518c7688ba3905fbdc00f35.png](https://i-blog.csdnimg.cn/blog_migrate/500076b6a44ae117ea6e70fbeb6de55c.jpeg)
sys.syscomments:
包含数据库中每个视图、规则、默认值、触发器、CHECK 约束、DEFAULT 约束和存储过程的项。text 列包含原始的 SQL 定义语句。
![23a38e962482c4ae049e09399e16ec49.png](https://i-blog.csdnimg.cn/blog_migrate/b4b4944a7ba74116b4d6e9e0da44607c.jpeg)