欢迎来到天天文库
浏览记录
ID:32925034
大小:59.89 KB
页数:4页
时间:2019-02-17
《解析依赖关系在sql数据库中引用》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、解析依赖关系在SQL数据库中引用【摘要】SQL依赖关系是在SQL表达式中使用的按名称引用,可使一个实体依赖于另一个实体。【关键词】依赖关系引用实体SQL依赖关系是在SQL表达式中使用的按名称引用,可使一个实体依赖于另一个实体。在其定义中引用了另一个实体并且该定义存储在系统目录中的实体称为“引用实体”。被另一个实体引用的实体称为“被引用的实体”。数据库引擎跟踪两种类型的依赖关系。・绑定到架构的依赖关系绑定到架构的依赖关系是一种两个实体之间的关系,只要引用实体存在,这种关系就可以防止被引用的实体被删除或更改。绑定到架构的依赖关系
2、是在使用WITHSCHEMABINDING子句创建视图或用户定义函数时创建的。绑定到架构的依赖关系也可以于表在CHECK或DEFAULT约束或计算列定义中引用另一个实体(例如Transact-SQL用户定义函数、用户定义类型或XML架构集合)时创建。使用由两部分chema_name.object_name)组成的名称指定对象不能称为绑定到架构的引用。•非绑定到架构的依赖关系非绑定到架构的依赖关系也是一种两个实体之间的关系,但这种关系并不防止被引用的实体被删除或修改。图中包含两个实体:过程X和过程Yo过程X包含一个对过程Y按名
3、称引用的SQL表达式。过程X称为"引用实体”,而过程Y称为"被引用的实体”。由于过程X依赖于过程Y,因此当过程Y不存在时,过程X将失败,并出现运行时错误。但是,当过程X不存在时,过程Y也不会失败。仅当表在计算列定义、CHECK约束或DEFAULT约束中引用Transact-SQL模块、用户定义类型或XML架构集合时,才会将该表作为引用实体进行跟踪。整数值大于1的带编号的存储过程将不会作为引用实体或被引用的实体进行跟踪。数据库引擎将在创建、更改或删除引用实体时自动跟踪依赖关系信息,并将此信息记录在SQLServer系统目录中。
4、例如,如果您创建了一个引用表的触发器,则这些实体间的依赖关系将被记录下来。如果您随后删除了该触发器,依赖关系信息将从系统目录中删除。SQLServer早期版本中的依赖关系按ID跟踪,与之不同的是,当前版本中的依赖关系按名称跟踪。也就是说,即使引用实体创建时被引用的实体并不存在,数据库引擎仍可跟踪两个实体间的依赖关系信息。之所以会发生这种情况,是因为存在延迟名称解析。例如,即使数据库中并不存在存储过程所引用的表,也可以成功创建该存储过程,但是该存储过程不能执行。数据库引擎记录此过程和表之间的依赖关系,但是,因为对象尚未存在,所
5、以无法记录表ID。如果随后创建了该表,则表ID将随其他依赖关系信息返回。当被引用的实体按名称显示在引用实体的持久化SQL表达式中时,依赖关系信息将会被跟踪。采用以下方式按名称引用实体时,将会获得依赖关系信息:•通过在Transact-SQL模块定义中使用下列任一语句:•数据操作语言(DML)语句(SELECT.INSERT.UPDATE.DELETE或MERGE)•EXECUTE•DECLARE•SET(当SET与用户定义函数或用户定义类型一起使用时。例如:(DECLARE@varint;SET@var=dbo.udflo)
6、不会跟踪使用数据定义语言(DDL)语句(如CREATE.ALTER或DROP)在Transact-SQL模块定义中引用的实体。•通过使用CREATE.ALTER或DROPTABLE语句,条件是这些语句不在Transact-SQL模块中并且被引用的实体为在计算列、CHECK约束或DEFAULT约束中定义的Transact-SQL用户定义函数、用户定义类型或XML架构集合时。当某个实体通过使用由三部分组成的有效名称引用另一个实体时,将创建跨数据库的依赖关系。当某个实体通过使用由四部分组成的有效名称引用另一个实体时,将创建跨服务器
7、的引用。仅当显式指定服务器和数据库的名称时,才会记录相应的名称。例如,当指定为MyServer.MyDB.MySchema.MyTable时,会记录服务器和数据库的名称,但是,当指定为时,将只记录服务器的名称。信息,请参阅Transact-SQL存在下列限制:不跟踪MyServer..MySchema・MyTable有关有效的多部分名称的详细语法约定(Transact-SQL)□OPENROWSET、OPENQUERY和OPENDATASOURCE语句的跨服务器依赖关系。不跟踪语句EXEC(,')ATlinked_serve
8、r的依赖关系。参考文献:[1]《数据库技术》清华大学出版社.(作者单位:大庆职业学院计算机系)
此文档下载收益归作者所有