【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