美文网首页SQL server数据库
Sql Server-实用技巧-在所有存储过程中查询包含某字符串

Sql Server-实用技巧-在所有存储过程中查询包含某字符串

作者: 柠檬正在努力 | 来源:发表于2020-04-11 17:58 被阅读0次

    下面直接放代码:
    一、利用sysobjects表和syscomments表进行查询

    SELECT Name
    FROM sysobjects o, syscomments s
    WHERE o.id = s.id
        AND text LIKE '%str%'
        AND o.xtype = 'P'
    

    这里解释一下
    sysobjects :在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行。只有在 tempdb 内,每个临时对象才在该表中占一行。
    sysobjects 表结构:

    列名 数据类型 描述
    name sysname 对象名,常用列
    id int 对象标识号
    xtype char(2) 对象类型。常用列。xtype可以是下列对象类型中的一种:
    C = CHECK 约束
    D = 默认值或 DEFAULT 约束
    F = FOREIGN KEY 约束
    L = 日志
    FN = 标量函数
    IF = 内嵌表函数
    P = 存储过程
    PK = PRIMARY KEY 约束(类型是 K)
    RF = 复制筛选存储过程
    S = 系统表
    TF = 表函数
    TR = 触发器
    U = 用户表   
    UQ = UNIQUE 约束(类型是 K)
    V = 视图
    X = 扩展存储过程

    syscomments:包含数据库中每个视图、规则、默认值、触发器、CHECK 约束、DEFAULT 约束和存储过程的项。text 列包含原始的 SQL 定义语句。
    syscomments 表结构:

    列名 数据类型 描述
    name sysname 对象名,常用列
    id int 该文本适用的对象 ID
    text nvarchar(4000) SQL 定义语句的实际文本。
    解码后的表达式的语义等同于原始文本,但是没有语法保证。
    例如,已解码的表达式中删除了空格。

    返回所有出现过该字符串的存储过程名:

    Name
    1 Table1
    2 Table2
    2 Table2

    所以这个查询的意思是,对两个系统表进行联查,查找关键条件是SQL 定义语句的实际文本中包含‘str‘的字符串的、对象类型为’P‘的对象。

    这在进行例如一些提醒消息的str从哪个存储过程拼接出来的这些情况下会非常方便,不需求一个个打开存储过程排查

    相关文章

      网友评论

        本文标题:Sql Server-实用技巧-在所有存储过程中查询包含某字符串

        本文链接:https://www.haomeiwen.com/subject/hspumhtx.html