在SQL Server中如何查看数据库视图的定义呢? 其实官方文档已经有一个较详细的总结了,这里在官方文档的基础上,我们再深入展开分析一下,例如如何获取系统视图的定义。知其然知其所以然吗。

1:使用SQL Server Management Studio(SSMS)

在“对象资源管理器”中,首先找到对应数据库中需要查看定义的视图,右键单击获取对象的定义脚本。这种方式非常简单。在此略过。

2:通过脚本查看视图的定义。

可以通过下面三种方式获取定义脚本,如下所示

USE YourSQLDba;GOSELECT definition, uses_ansi_nulls, uses_quoted_identifier, is_schema_boundFROM sys.sql_modulesWHERE object_id = OBJECT_ID('PerfMon.SessionInfo');GOUSE YourSQLDba;GOSELECT OBJECT_DEFINITION (OBJECT_ID('PerfMon.SessionInfo')) AS ObjectDefinition;GOUSE YourSQLDba;GOEXEC sp_helptext 'PerfMon.SessionInfo';

那么上面方式可以查看系统视图的定义吗? 实验验证测试一下即可知道。

1:首先,在SSMS的“对象资源管理器”中是是无法查看系统视图的定义的。SSMS直接屏蔽了相关功能。

2:上面三种脚本方式,sys.sql_modules 无法查看系统视图定义,内置函数OBJECT_DEFINITION、系统存储过程OBJECT_DEFINITION可以查看系统视图的定义。

系统视图无法查看对应的系统定义是因为条件限制原因(has_access('CO', o.id) = 1),如下所示:

SET QUOTED_IDENTIFIER ONSET ANSI_NULLS ONGOCREATE VIEW sys.sql_modules ASSELECT object_id = o.id,definition = object_definition(o.id),uses_ansi_nulls = sysconv(bit, o.status & 0x40000),             -- OBJMOD_ANSINULLSuses_quoted_identifier = sysconv(bit, o.status & 0x80000),      -- OBJMOD_QUOTEDIDENTis_schema_bound = sysconv(bit, o.status & 0x20000),             -- OBJMOD_SCHEMABOUNDuses_database_collation = sysconv(bit, o.status & 0x100000),    -- OBJMOD_USESDBCOLLis_recompiled = sysconv(bit, o.status & 0x400000),              -- OBJMOD_NOCACHEnull_on_null_input = sysconv(bit, o.status & 0x200000),         -- OBJMOD_NULLONNULLexecute_as_principal_id = x.indepid,uses_native_compilation = sysconv(bit, case when (o.type = 'P') then o.status & 0x00000200 else 0 end)    -- OBJPRC_HEKATONFROM sys.sysschobjs oLEFT JOIN sys.syssingleobjrefs x ON x.depid = o.id AND x.class = 22 AND x.depsubid = 0 -- SRC_OBJEXECASOWNERWHERE o.pclass <> 100 -- x_eunc_ServerAND ((o.type = 'TR' AND has_access('TR', o.id, o.pid, o.nsclass) = 1)OR (type IN ('P','V','FN','IF','TF','RF','IS') AND has_access('CO', o.id) = 1)OR (type IN ('R','D') AND o.pid = 0))AND (o.status2 & 0x00000020) = 0GO

如果你到这一步以为就结束了的话,那么你太天真了。内置函数OBJECT_DEFINITION、系统存储过程OBJECT_DEFINITION对于有些视图也束手无策。如下所示,获取系统视图sys.parameters的定义如下。

CREATE VIEW sys.parametersASSELECT  object_id ,name ,parameter_id ,system_type_id ,user_type_id ,max_length ,PRECISION ,scale ,is_output ,is_cursor_ref ,has_default_value ,is_xml_document ,default_value ,xml_collection_id ,is_readonly ,is_nullableFROM    sys.parameters$WHERE   number = 1

其实对象sys.parameters$也是一个视图,正常情况下是无法查看sys.parameters$这个对象的,在专用管理员模式(DAC)下面才可以查看sys.parameters$的定义,而且只能通过系统内置函数OBJECT_DEFINITION,而sp_helptext是会报错的。如果你要弄清楚一些系统视图的定义,那么基本上就要借助专用管理员模式(DAC)模式来查看。

USEYourSQLDba;

GO

SELECTOBJECT_DEFINITION(OBJECT_ID('sys.parameters$'))ASObjectDefinition;

GO

CREATE VIEW sys.parameters$ ASSELECT c.id AS object_id,c.number, c.name,c.colid AS parameter_id,c.xtype AS system_type_id,c.utype AS user_type_id,c.length AS max_length,c.prec AS precision,c.scale AS scale,sysconv(bit, c.status & 512) AS is_output,        -- CPM_OUTPUTsysconv(bit, c.status & 1024) AS is_cursor_ref,    -- CPM_CURSORREFsysconv(bit, isnull(v.objid, 0)) AS has_default_value,sysconv(bit, c.status & 2048) AS is_xml_document, -- CPM_XML_DOCv.value AS default_value,xmlns AS xml_collection_id,sysconv(bit, c.status & 4194304) AS is_readonly, -- CPM_IS_READONLY = 0x00400000sysconv(bit, 1 - (c.status & 1)) AS is_nullable -- CPM_NOTNULL  = 0x00000001FROM sys.syscolpars cLEFT JOIN sys.sysobjvalues v ON v.valclass = 9 AND v.objid = c.id AND v.subobjid = c.colid AND v.valnum = 0    -- SVC_PARAMDEFAULTWHERE number > 0 AND has_access('CO', c.id) = 1

其实在专用管理员模式(DAC)下面,虽然能查到sys.parameters$的定义,但是在基表sys.sysschobjs里面找不到sys.parameters$这个对象,其实你可以找到系统的Resource数据库

一般位于:\Program Files\Microsoft SQL Server\MSSQL.\MSSQL\Binn\下面(以实际安装路径为准),名字为mssqlsystemresource.mdf ,你可以将其Copy到其它位置后,然后附加重命名为一个数据库,例如我附加为resource数据库,然后你就可以在SSMS界面直接获取系统视图的定义了。

注意,在SQL Server 2014测试发现,SQL Server里面看不到System Tables下的相关基表了,应该是其屏蔽了这些功能,下面截图是在SQL Server 2008 R2测试环境。

参考资料:

python 查询sqlserver 视图_SQL Server查看视图定义总结相关推荐

  1. java查看sql视图_SQL Server查看视图定义总结

    在SQL Server中如何查看数据库视图的定义呢? 其实官方文档已经有一个较详细的总结了,这里在官方文档的基础上,我们再深入展开分析一下,例如如何获取系统视图的定义.知其然知其所以然吗. 1:使用S ...

  2. python 查询sqlserver 视图_SQL Server 2017 数据库教与学(教学大纲,含Python+SQL Server案例)...

    原标题:SQL Server 2017 数据库教与学(教学大纲,含Python+SQL Server案例) 本书提供Python+SQL Server案例 SQL Server教学大纲 一.课程的性质 ...

  3. python 查询sqlserver 视图_在Python中,将SQL查询的输出显示为表,就像在SQL中一样...

    这似乎是一个基本的函数,但我对Python还不熟悉,所以也许我没有正确地搜索这个函数. 在Microsoft SQL Server中,当SELECT top 100 * FROM dbo.Patien ...

  4. python查询sqlserver视图_基于odoo11上的SQL查询构建一个新的视图或模型

    我正在研究一个奥多模块.在 我希望我的模块是一个"报告"大多数购买的产品(按客户).在 我已经在Odoo上创建了一个视图,但是现在,我需要按客户"过滤"这些视图 ...

  5. python查询sqlserver视图_如题:sqlserver连接Oracle数据库,在sql查询分析器中查询oracle中的视图,根据时间字段查询,SQL语句...

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  6. sql server 视图_SQL Server –具有引用视图的开发实践

    sql server 视图 We've recently had production failures because our developers changed an important ref ...

  7. mysql视图转sql server视图_SQL Sever MYSQL 视图实现的 2 种方式

    前期准备: 1.create table person  # 假设这张表用来收录所以有地球人的基本信息. (ID bigint , Name varchar(16), Country varchar( ...

  8. mysql查看索引创建进度_SQL Server查看索引重建、重组索引进度

    相信很多SQL Server DBA或开发人员在重建或重组大表索引时,都会相当郁闷,不知道索引重建的进度,这个对于DBA完全是一个黑盒子,对于系统负载非常大的系统或维护窗口较短的系统,你会遇到一些挑战 ...

  9. 将mysql表导入sqlserver中_sql server to mysql 导入数据库

    由于工作原因需要将sqlserver 转换为mysql数据库.这期间有朋友帮忙万分感谢.感谢 大概步骤是: 1.配置MYSQL的ODBC,把表结构导过去. 2.然后再配置ACCESS ODBC 3.把 ...

最新文章

  1. CQRS实践(3): Command执行结果的返回
  2. python画心形图像
  3. 华为交换机端口组配置实例
  4. Android BOOTCLASSPATH详解
  5. android 图像对比,Android中比较两个图片是否一致的问题
  6. script标签属性用type还是language?
  7. [css] 使用rem时应该注意什么?
  8. AFNetworking 3.0源码阅读 - AFURLResponseSerialization
  9. k8s consul 服务发现_Swoft之服务注册发现Consul服务器配置
  10. raspberry pi_如何将Raspberry Pi配置为微控制器
  11. 计算机代码如何使用方法,电脑定时自动关机代码怎么样使用
  12. 【报告分享】2021年中国数字经济就业发展研究报告.pdf(附下载链接)
  13. CenterLoss
  14. lucene 多字段查询-MultiFieldQueryParser
  15. JavaScript中canvas绘制太极图案
  16. Python 后台启动程序
  17. 封神台----尤里的复仇I-第一章:为了女神小芳
  18. MATLAB怎么新建头文件,头文件()包含了C++的MATLAB引擎函数的定义。
  19. 02前端入门HTML5 +CSS3+电商网页制作:CSS
  20. CSS3计数器的使用-遁地龙卷风

热门文章

  1. java中的args参数
  2. JavaWeb笔记01-XML
  3. Flask的csrf_token的用法
  4. Linux系统7个运行级别图文详解
  5. 在启动HDFS时,针对集群中namenode无法识别datanode的问题的解决方法
  6. 八大排序算法:插入(2:插入、希尔)、选择(2:选择、堆)、交换(2:冒泡、快速)、归并、基数
  7. CF1042F Leaf Sets (贪心+树上构造)
  8. 点击开启此虚拟机时,出现“该虚拟机似乎正在使用中”问题
  9. cocoapods 命令
  10. struts-tiles学习笔记