转发:使用sql命令查询视图中所有引用的基础表
转自:使用sql命令查询视图中所有引用的基础表
使用sql命令查询视图中所有引用的基础表
查询的sql语句如下:
set @v_name='v_view' --需要查询的视图名
declare @t_temp_referenced table
(
tname varchar(50),
ttype varchar(10),
tlevel int
)
insert into @t_temp_referenced(tname,ttype,tlevel)
select a.referenced_entity_name,b.xtype,0 from
(
select distinct referenced_entity_name from sys.sql_expression_dependencies
where referencing_id = object_id(@v_name) and [referenced_class] = 1 and [is_ambiguous] = 0
) a
left join sys.sysobjects b on a.referenced_entity_name=b.name
declare @name varchar(50)
declare @level int
set @level=0
while (select count(1) from @t_temp_referenced where ttype='V' and tlevel=@level) >0
begin
declare result cursor local for select tname from @t_temp_referenced where ttype='V' and tlevel=@level
open result
fetch next from result into @name
while @@fetch_status=0
begin
insert into @t_temp_referenced(tname,ttype,tlevel)
select a.referenced_entity_name,b.xtype,@level+1 from
(
select distinct referenced_entity_name from sys.sql_expression_dependencies
where referencing_id = object_id(@name) and [referenced_class] = 1 and [is_ambiguous] = 0
) a
left join sys.sysobjects b on a.referenced_entity_name=b.name
where not exists(select 1 from @t_temp_referenced t1
where t1.tname=a.referenced_entity_name and t1.ttype=b.xtype and t1.tlevel=@level+1 )
fetch next from result into @name
end
close result
deallocate result
set @level=@level+1
end
select distinct tname from @t_temp_referenced
where ttype='U'
注意:sys.sql_expression_dependencies视图只有sql2008及以上版本才有,sql2005是没有的。
复制sys.sql_expression_dependencies视图的说明如下:
| 列名 | 数据类型 | 说明 |
|---|---|---|
| referencing_id | int | 引用实体的 ID。不可为 Null。 |
| referencing_minor_id | int | 引用实体为列时的列 ID;否则为 0。不可为 Null。 |
| referencing_class | tinyint | 引用实体的类。 1 = 对象或列 12 = 数据库 DDL 触发器 13 = 服务器 DDL 触发器 不可为 Null。 |
| referencing_class_desc | nvarchar(60) | 对引用实体的类的说明。 OBJECT_OR_COLUMN DATABASE_DDL_TRIGGER SERVER_DDL_TRIGGER 不可为 Null。 |
| is_schema_bound_reference | bit | 1 = 被引用的实体绑定到架构。 0 = 被引用的实体未绑定到架构。 不可为 Null。 |
| referenced_class | tinyint | 被引用的实体的类。 1 = 对象或列 6 = 类型 10 = XML 架构集合 21 = 分区函数 不可为 Null。 |
| referenced_class_desc | nvarchar(60) | 对被引用的实体的类的说明。 OBJECT_OR_COLUMN TYPE XML_SCHEMA_COLLECTION PARTITION_FUNCTION 不可为 Null。 |
| referenced_server_name | sysname | 被引用的实体的服务器的名称。 此列是为通过指定由四个部分组成的有效名称所生成的跨服务器依赖关系填充的。有关由多个部分组成的名称的信息。 对于非绑定到架构的实体,如果实体被引用时没有指定由四个部分组成的名称,此列为 NULL。 对于绑定到架构的实体,此列为 NULL,原因在于它们必须在同一数据库中,因而只能使用由两个部分 (schema.object) 组成的名称定义。 |
| referenced_database_name | sysname | 被引用的实体的数据库的名称。 此列是为通过指定由三个部分或四个部分组成的有效名称生成的跨数据库或跨服务器引用填充的。 对于非绑定到架构的引用,当使用由一个部分或两个部分组成的名称指定时,此列为 NULL。 对于绑定到架构的实体,此列为 NULL,原因在于它们必须在同一数据库中,因而只能使用由两个部分 (schema.object) 组成的名称定义。 |
| referenced_schema_name | sysname | 被引用的实体所属的架构。 对于非绑定到架构的引用,如果实体被引用时没有指定架构名称,此列为 NULL。 对于绑定到架构的引用,此列永不为 NULL,原因在于必须使用由两部分组成的名称来定义和引用绑定到架构的实体。 |
| referenced_entity_name | sysname | 被引用的实体的名称。不可为 Null。 |
| referenced_id | int | 被引用的实体的 ID。 对于跨服务器和跨数据库引用,此列始终为 NULL。 对于数据库内的引用,如果无法确定 ID,则为 NULL。对于非绑定到架构的引用,在以下情况下将无法解析 ID:
对于绑定到架构的引用,此列永远不会为 NULL。 |
| referenced_minor_id | int | 引用实体为列时被引用的列的 ID;否则为 0。不可为 Null。 当列在引用实体中按名称标识时,或者当 SELECT * 语句中使用了父实体时,被引用的实体为列。 |
| is_caller_dependent | bit | 指示被引用的实体的架构绑定在运行时发生,因此,实体 ID 的解析依赖于调用方的架构。当被引用的实体为存储过程、扩展存储过程或在 EXECUTE 语句中调用的非绑定到架构的用户定义函数时,将会出现这种情况。 1 = 被引用的实体依赖于调用方并在运行时解析。在这种情况下,referenced_id 为 NULL。 0 = 被引用的实体 ID 不依赖调用方。 对于绑定到架构的引用、显式指定架构名称的跨数据库和跨服务器的引用,始终为 0。例如,对格式为 EXEC MyDatabase.MySchema.MyProc 的实体的引用不依赖于调用方。但是,格式为 EXEC MyDatabase..MyProc 的引用依赖调用方。 |
| is_ambiguous | bit | 指示引用为不明确引用,并可以在运行时解析为用户定义函数、用户定义类型 (UDT) 或者对 xml 类型的列的 xquery 引用。 例如,假定语句 SELECT Sales.GetOrder() FROM Sales.MySales 是在存储过程中定义的。在执行存储过程之前,并不知道 Sales.GetOrder() 是 Sales 架构中的用户定义函数还是带有名为 GetOrder() 的方法、类型为 UDT 且名为 Sales 的列。 1 = 引用不明确。 0 = 引用是明确的,或者在调用视图时可以成功绑定实体。 对于绑定到架构的引用始终为 0。 |
转发:使用sql命令查询视图中所有引用的基础表的更多相关文章
- Windows自带强大的入侵检测工具——Netstat 命令 查询是否中木马
Netstat命令可以帮助我们了解网络的整体使用情况.根据Netstat后面参数的不同,它可以显示不同的网络连接信息.Netstat的参数如图,下面对其中一些参数进行说明.如何检测本机是否有被中木马, ...
- SQL语句查询关键字中含有特殊符号怎么处理, 例如 'SMI_'
SQL语句查询关键字中含有特殊符号怎么处理, 例如 'SMI_' 错误:select * from emp where ename like '%SML_%' 正确:select * from em ...
- SQL like查询条件中的通配符处理
1. SQL like对时间查询的处理方法 SQL数据表中有savetime(smalldatetime类型)字段,表中有两条记录,savetime值为:2005-3-8 12:12:00和2005- ...
- SQL Server 查询处理中的各个阶段(SQL执行顺序)
SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后 ...
- 利用SQL语句查询数据库中所有表
Oracle: SELECT * FROM ALL_TABLES;系统里有权限的表 SELECT * FROM DBA_TABLES; 系统表 SELECT * FROM USER_TABLES; 当 ...
- Sql server 查询数据库中包含某字段的所有的表
我们有时候会需要查询数据库中包含某字段的所有的表,去进行update,这时就可以用下面的SQL来实现: select object_name(id) objName,Name as colName f ...
- sql语句查询数据库中的表名/列名/主键/自动增长值
原文地址:http://blog.csdn.net/pukuimin1226/article/details/7687538 ----查询数据库中用户创建的表 ----jsj01 为数据库名 sele ...
- SQL 将查询结果插入到另一张表中
INSERT INTO (1) 如果两张表(导出表和目标表)的字段一致,并且希望插入全部数据,可以用这种方法: INSERT INTO 目标表 SELECT * FROM 来源表 WHERE 条件; ...
- SQL命令查询Oracle存储过程信息(代码内容等)
SELECT * FROM ALL_SOURCE where TYPE='PROCEDURE' AND TEXT LIKE '%0997500%'; --查询ALL_SOURCE中,(脚本代码)内 ...
随机推荐
- 关于ajax提交的公共接口的一大用处
在项目框架搭建的时候,就写了ajax提交的公共接口,是想统一的日志和处理ajax返回的错误信息. 今天,却又帮我解决了另外一个问题:每次点开某个页面,有一个ajax请求总是会调用两次,于是打开chro ...
- 菜单之二:使用xml文件定义菜单
参考<疯狂android讲义>2.10节 P174,参见归档project:XmlMenuDemo.zip 一般推荐使用XML文件定义菜单. 基本步骤如下: 1.定义布局文件 为简单显示原 ...
- 日志管理-将Log4net的配置配置到的独立文件中
转自:http://www.cnblogs.com/zfanlong1314/p/3662679.html使用log4net已经很久了.但从来没有详情了解log4的参数,及具体使用方法.看了周公的博客 ...
- python-整理-面向对象
python的类和perl的类有相似之处,类的方法的第一个参数是表示类的对象自己,相当于c#的this python中定义类 class person: ''示例类,人'' count=0; def ...
- Pie--hdu1969(二分法)
Pie Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- 使用StackTrace堆栈跟踪记录详细日志(可获取行号)
上一篇我们提到使用.NET自带的TraceSource实现简单的日志,具体请看<轻松背后的N+疲惫——系统日志>,这一篇注意想讲的是日志的详细记录,包含请求开始到结束的过程中调用的方法链以 ...
- COB(Chip On Board)的製程簡單介紹
前面提及 COB 的生產與 IC 的封裝製程幾乎是一致的,除了把 leadframe 改成了 PCB,把封膠由 molding 改成 dispensing,少了 triming & marki ...
- Intuit Quicken Home & Business 2016(Manage your business and personal finances)
Quicken Home & Business 2016 - Manage your business and personal finances all in one place. Cate ...
- (十)boost库之多线程
(十)boost库之多线程 1.创建线程 使用boost库可以方便的创建一个线程,并提供最多支持9个参数的线程函数,相对于void*来说,方便了很多,创建线程主要提供了一下3种方式: 线程库头文件:# ...
- wikioi1450 xth的旅行
题目描述 Description 毕业了,Xth很高兴,因为他要和他的 rabbit 去双人旅行了.他们来到了水城威尼 斯.众所周知(⊙﹏⊙b汗),这里的水路交通很发达,所以 xth 和 rabbit ...