zoukankan      html  css  js  c++  java
  • 【SQL Server学习笔记】数据库对象维护、对象依赖

    数据库对象维护

    CREATE TABLE T(vid int primary key,v varchar(100))
    
    create index idx_v on T(v)
    
    --改变表名
    --注意: 更改对象名的任一部分都可能会破坏脚本和存储过程。
    EXEC sp_rename 
    	@objname = 'dbo.T',      --架构.表名
    	@newname = 'TT',
    	@objtype = 'object'      --类型为对象
    
    	
    --改变表的列名称
    EXEC sp_rename
    	@objname = 'dbo.TT.v',    --架构.表名.列名
    	@newname = 'vv',
    	@objtype = 'column'       --类型为列
    
    
    --改变某个表中索引的名称	
    exec sp_rename
    	@objname ='dbo.TT.idx_v', --架构.表名.索引名
    	@newname = 'idx_vv',
    	@objtype = 'Index'        --类型为索引
    
    --用户拥有架构,而架构拥有很多对象
    --就是把老架构下面的某个对象,移动到新架构下面
    ALTER SCHEMA 新架构名 Transfer 老架构.对象
    


    对象依赖

    --对象依赖关系
    CREATE DATABASE WCC
    go
    
    CREATE DATABASE WCD
    go
    
    USE WCC
    GO
    
    CREATE TABLE DBO.C(VID INT NOT NULL,
                       VV VARCHAR(10))
    GO
    
    USE WCD
    GO
    
    CREATE PROCEDURE DBO.PROC_USE_C
    as
    
    select VID,VV
    from WCC.DBO.C
    
    GO
      
                       
    SELECT referencing_id,
           OBJECT_NAME(referencing_id) as objname,
           referencing_class_desc,  --引用实体的类型
           
           is_schema_bound_reference, --被引用实体是否绑定到架构
           referenced_class_desc,     --被引用实体的类型
           referenced_server_name,    --被引用服务器的名称
           referenced_database_name,  --被引用数据库的名称
           referenced_schema_name,    --被引用实体的架构
           
           --如果是跨服务器数据库的则为NULL;对于非绑定架构的引用,
           --如果被引用实体不存在或无法解析,则为null
           --如果被引用实体的架构依赖于调用方架构,会在运行时解析,此时is_caller_dependent=1
           referenced_id,
           referenced_minor_id , --引用实体为列时被引用列的ID
           is_caller_dependent , --被引用实体是否依赖于运行时的解析,
                                 --如果依赖那么referenced_id为null
                                 
           is_ambiguous          --指出引用为不明确引用
           
    FROM SYS.sql_expression_dependencies
    
    
    use WCD
    go
    
    create procedure dbo.proc_use_w
    as
    
    select *
    from wcc.dbo.wccc  --注意:这个表还有没创建,在运行时会报错
    go
    
    --可以显示对不存在对象的引用
    select * from sys.sql_expression_dependencies
    
    
    
    --返回被引用的对象
    select *
    from sys.dm_sql_referenced_entities('dbo.TT',   --返回被dbo.TT引用的对象
                                        'Object')   --dbo.TT的类型
    
    --返回引用的对象
    select *
    from sys.dm_sql_referencing_entities('dbo.TT',  --引用dbo.TT的对象 
                                         'object')   
    
    
    /*==========================================================
    对象定义:
    
    返回用户定义和基于系统的约束、默认值、
                          存储过程、函数、视图、
                          角色、架构级DML、DDL触发器的T-SQL定义
    ============================================================*/
    select OBJECT_DEFINITION(object_id('dbo.proc_use_c'))  --对象id
    
    --普通用户定义的
    SELECT object_id,
           definition  --T-SQL定义
    FROM SYS.sql_modules
    WHERE object_id = object_id('dbo.proc_use_c')
    
    --系统内部的T-SQL定义
    select  object_id,
            definition --T-SQL定义
    from sys.system_sql_modules 
    


    早期版本可以查询这个视图: 

    select d.class,
           d.class_desc,   --引用类别描述
           d.object_id,    --引用对象id
           d.column_id,    --引用对象列id
           
           d.referenced_major_id,   --被引用的对象id和列id
           d.referenced_minor_id,
           
           d.is_selected,
           d.is_updated,
           d.is_select_all
    from sys.sql_dependencies d


  • 相关阅读:
    查看版本号以及如何升级
    http协商缓存VS强缓存
    「JOISC 2012」星座(凸包)
    「科技」求欧拉数单项
    「科技」在线 O(1) 逆元
    「JOISC 2017 Day 3」自然公园(交互)
    「IOI 2021」分糖果(线段树)
    「EOJ 317A」击鼓传花(类欧)
    「CF 1483E」Vabank(交互,构造)
    「NOIP 2020」微信步数(计数)
  • 原文地址:https://www.cnblogs.com/momogua/p/8304624.html
Copyright © 2011-2022 走看看