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

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

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

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


列名


数据类型


描述


name


sysname


对象名。


id


int


对象标识号。


xtype


char(2)


对象类型。可以是下列对象类型中的一种:

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 = 扩展存储过程


uid


smallint


所有者对象的用户 ID。


info


smallint


保留。仅限内部使用。


status


int


保留。仅限内部使用。


base_schema_ ver


int


保留。仅限内部使用。


replinfo


int


保留。供复制使用。


parent_obj


int


父对象的对象标识号(例如,对于触发器或约束,该标识号为表 ID)。


crdate


datetime


对象的创建日期。


ftcatid


smallint


为全文索引注册的所有用户表的全文目录标识符,对于没有注册的所有用户表则为 0。


schema_ver


int


版本号,该版本号在每次表的架构更改时都增加。


stats_schema_ ver


int


保留。仅限内部使用。


type


char(2)


对象类型。可以是下列值之一:

C = CHECK 约束

D = 默认值或 DEFAULT 约束

F = FOREIGN KEY 约束

FN = 标量函数

IF = 内嵌表函数

K = PRIMARY KEY 或 UNIQUE 约束

L = 日志

P = 存储过程

R = 规则

RF = 复制筛选存储过程

S = 系统表

TF = 表函数

TR = 触发器

U = 用户表

V = 视图

X = 扩展存储过程


userstat


smallint


保留。


sysstat


smallint


内部状态信息。


indexdel


smallint


保留。


refdate


datetime


留用。


version


int


保留。


deltrig


int


保留。


instrig


int


保留。


updtrig


int


保留。


seltrig


int


保留。


category


int


用于发布、约束和标识。


cache


smallint


保留。

注:上表来源于:https://blog.csdn.net/xuchaofu/article/details/3458716

2、顺便记录一下sysobjects的一些经典用法,比如说查表是否存在?

--方法1:
IF EXISTS (SELECT 1 FROM DBO.SYSOBJECTS WHERE ID=OBJECT_ID(N‘[DBO].[表名]‘) AND OBJECTPROPERTY(ID, N‘ISUSERTABLE‘)=1)
    DROP TABLE [DBO].[表名]

--方法2:
IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE XTYPE=‘U‘ AND NAME=‘表名‘)
    DROP TABLE [DBO].[表名]

3、言归正传,重点来了:比如查一个表如[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 类型

结果如下:

原文地址:https://www.cnblogs.com/atomy/p/11802460.html

时间: 2024-11-13 10:03:23

查询代码在哪个视图、存储过程、函数、触发中使用过的相关文章

SqlServer更新视图存储过程函数脚本

--视图.存储过程.函数名称 DECLARE @NAME NVARCHAR(255); --局部游标 DECLARE @CUR CURSOR --自动修改未上状态为旷课 SET @CUR=CURSOR SCROLL DYNAMIC FOR SELECT NAME FROM DBO.SYSOBJECTS     WHERE NAME NOT IN ('SYSCONSTRAINTS','SYSSEGMENTS')         AND         (             OBJECTPRO

视图 触发器 存储过程 函数 流程过程 索引 慢查询

视图 触发器 存储过程 函数 流程过程 索引 慢查询 视图 触发器 事务 存储过程 内置函数 流程控制 索引 视图 1.什么是视图 ? 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 ? 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何用视图 create view teacher2course as select * from teacher inner join course on teacher.tid = course.teacher_id; 强调

触发器,函数,视图,存储过程

触发器:是一个特殊的存储过程,它是mysql在insert,update,delete的时候自动执行的代码块. create trigger trigger_name after/before insert /update/delete on 表名 for each row begin sql语句:(触发的语句一句或多句) end 函数:mysql中提供了许多内置函数,还可以自定义函数(实现程序员需要的sql逻辑处理) 自定义函数创建语法 创建:CREATE FUNCTION 函数名称(参数列表

sqlserver中的存储过程 函数 事物 索引及视图

                                       存储过程和函数具体的区别: 核心提示:本质上没区别.只是函数有限制只能返回一个标量,而存储过程可以返回多个.并且函数是可以嵌入在SQL中使用的,可以在SELECT等SQL语句中调用,而存储过程不行.执行的本质都一样. 函数限制比较多,如不能用临时表,只能用表变量等,而存储过程的限制相对就比较少. 1. 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强. 2. 对于存储过程来说可以返回参数,而函数只

Mysql之视图 触发器 事务 存储过程 函数

视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,那就意味着扩展sql极为不便,因此并不推荐使用 #两张有关系的表 mysql> se

Mysql学习---视图/触发器/存储过程/函数/索引 180101

视图 视图: 视图是一个虚拟表(非真实存在),动态获取数据,仅仅能做查询操作 本质:[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用.由于视图是虚拟表,所以无法使用其对真实表进行创建.更新和删除操作,PyMysql是支持视图的. 仅能做查询用. 创建视图: create VIEW stu as select * from student; # 这里只是建立了一个对应关系,视图是虚表,动态获取数据 select * from stu;

Java学习总结(十八)——MySQL数据库(4)MySQL数据库中的视图,函数,存储过程中常见循环

一.MySQL存储过程中常见的循环1.while循环:WHILE.....DO.....END WHILE例1:创建存储过程(求1+2+.......+num的和):创建成功,进行调用:显示结果:2.REPEAT循环: REPEAT.........UNTLL END REPEAT例2:创建存储过程:创建完成,调用存储过程:显示结果:3.LOOP循环:LOOP END LOOP 例3:创建存储过程:创建成功,调用存储过程:显示结果:二.MySQL中的视图1.概念:有结构(有行有列),但没有结果(

网站加载有商务通、商桥,定义js函数触发快商通代码

有的网站已经加载了商务通.商桥的,前期定义了js函数 触发商务通.商桥代码的,可以重新定义新的函数对之前的函数进行覆盖,其 js代码为: var domain = document.domain; /*------------------加载快务通链接---------------*/ var kstJS='<script type="text/javascript" src="http://kefu6.kuaishang.cn/bs/ks.j?cI=399142&am

查看SQL SERVER 加密存储过程,函数,触发器,视图

原文:查看SQL SERVER 加密存储过程,函数,触发器,视图 create  PROCEDURE sp_decrypt(@objectname varchar(50))ASbeginset nocount on--CSDN:j9988 copyright:2004.07.15 --V3.2 --破解字节不受限制,适用于SQLSERVER2000存储过程,函数,视图,触发器--修正上一版"视图触发器"不能正确解密错误--发现有错,请E_MAIL:[email protected]be