SQL Server查询代码在哪个视图、存储过程、函数、触发中使用过

    工作中偶尔会出现:想用A数据表替换B数据表,然后把B数据表删除。但是,又不知道B数据表在哪个视图、存储过程、函数、触发器中使用过?

    经过一番度娘,看到实现方法也不难,主要涉及两个系统表:sysobjects及syscomments。

    1、先来复习一下sysobjects表结构:

    2、比如查一个表如[RC_位数]在哪些代码中使用过?

SELECT A.NAME 来源名称,B.TEXT 代码内容,
    CASE
        WHEN A.XTYPE='V' THEN '视图'
        WHEN A.XTYPE='P' THEN '存储过程'
        WHEN A.XTYPE='FN' THEN '标量函数'
        WHEN A.XTYPE='TF' THEN '表函数'
        WHEN A.XTYPE='TR' THEN '触发器'
        ELSE A.XTYPE
    END 类型
FROM sysobjects A INNER JOIN syscomments B ON A.ID=B.ID
WHERE B.TEXT LIKE '%RC_位数%'
ORDER BY 类型

    结果如下:

    需要说明的是,假如代码如存储过程使用WITH ENCRYPTION等方式加密过时,是查不到结果的。因为加密过的内容,在syscomments中会显示为NULL。

--RC_COST_CO是加密过的存储过程
SELECT A.NAME 来源名称,B.TEXT 代码内容,
    CASE
        WHEN A.XTYPE='V' THEN '视图'
        WHEN A.XTYPE='P' THEN '存储过程'
        WHEN A.XTYPE='FN' THEN '标量函数'
        WHEN A.XTYPE='TF' THEN '表函数'
        WHEN A.XTYPE='TR' THEN '触发器'
        ELSE A.XTYPE
    END 类型
FROM sysobjects A INNER JOIN syscomments B ON A.ID=B.ID
WHERE A.NAME='RC_COST_CO'
ORDER BY 类型

    结果如下:

posted @ 2019-11-05 23:51  缥缈的尘埃  阅读(1080)  评论(0)    收藏  举报