• 说下如何查找一下那些对象引用了某对象


    有时候,当我们对某个表,存储过程要做调整,结构修改的时候,如果不太清楚会影响到什么对象,哪些逻辑的时候,我们不妨可以先搜一下,有哪些的存储过程,函数阿视图阿引用到这个对象。再评估一下影响。我的分享是这样纸的~

    1、通过系统表 sys.sql_expression_dependencies 来进行查看

    比如说我们有下面的例子

    CREATE TABLE [dbo].[A1](
        [ID] [int] IDENTITY(1,1) NOT NULL,
        [Name] [varchar](50) NULL,
    PRIMARY KEY CLUSTERED 
    (
        [ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    
    --视图
    create view vA1 as
    select ID,Name
     from A1
        where ID < 6
    go
    
    --函数
    create function fn_A1(@i int)
    returns int
    as
    begin 
        declare @a int
        select @a = max(id) 
            from A1
    
        set @i = case when @i > @a then @i else @a end
        return @i
    end
    
    --普通存储过程
    create procedure rA1
    as
        select * from A1
    go
    
    
    --然后观察,这里3个对象都在~
    --------------------------------------
    vA1
    fn_A1
    rA1

    但是是不是可以放一万个心那?并不是

    然后我们做另外的情况

    --情况1 ,在同服务器的另外的数据库里面跨数据库访问 A1
    create proc Test1
    as
        select * from Test..A1
    go
    
    --情况2,存储过程里面调用动态语句
    create procedure rA12
    as
        exec ('select * from A1')
    go
    
    --情况3,随手加密存储过程
    create procedure rA11
    with ENCRYPTION
    as
        select * from A1
    go
    
    --Check,结果只有加密的存储过程能正常显示引用
    
    select OBJECT_NAME(referencing_id) from sys.sql_expression_dependencies 
        where referenced_id = OBJECT_ID('A1')
    
    -------------------------------------------------
    vA1
    fn_A1
    rA1
    rA11

    然后我们可以采取另外一个系统表来查~ sys.syscomments 

    --动态语句rA12出来了,但是加密的A11没有出来。毕竟加密了嘛╮(╯_╰)╭
    select  OBJECT_NAME(id) from sys.syscomments where text like '%A1%'
    
    -----------------------------------------
    vA1
    fn_A1
    rA1
    rA12

    所以使用这2个对象,大概就能找出80%以上的引用对象啦~除了其他数据库跨数据库调用你看不到,因为跨数据库引用的对象,在本数据库里面 sys.sql_expression_dependencies  存放的 referenced_id  是一个空值,但是可以在 referenced_entity_name 可以找出一下信息。这种情况下,是找不到了,另外一种,是运用连接服务器去调用,这个更加无从找了~呵呵~

    好吧~希望本次分享对大家有用

  • 相关阅读:
    Tomcat性能调优方案
    内存泄露和内存溢出
    HashMap和Hashtable的区别
    properties类是Hashtable的子类
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/Gin-23333/p/5008858.html
Copyright © 2020-2023  润新知