现在的位置: 首页 > 综合 > 正文

【SQL Server学习笔记】数据库对象维护、对象依赖

2014年07月28日 ⁄ 综合 ⁄ 共 1904字 ⁄ 字号 评论关闭

数据库对象维护

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 

 

抱歉!评论已关闭.