SQL Server 2008提供了上百个系统视图,这些视图可以让你查看数据库和服务器元数据,而无需访问真正的数据源。系统分类视图的目录在通过数据库引擎提取信息时特别有用。SQL Server目录视图是视图的集合,为目录元数据提供通用的接口。 通过目录视图你能访问到的信息量是非常广泛的。
例如,使用目录视图提取关于特定数据库中表和视图的信息。或者提取关于安全对象,全文检索,数据库镜像,分区或者各种其它目录相关的信息。 SQL Server目录视图可以按功能线分成子分类,比如数据库对象视图和安全视图。在本文中,我为你提供了这样几种子分类的视图示例。
我在SQL Server 2008的一个本……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
![TechTarget微信公众号二维码](/wp-content/uploads/res/images/spriteimg/ttweixin.jpg)
TechTarget
官方微博
![TechTarget中国官方微博二维码](/wp-content/uploads/res/images/spriteimg/ttweibo.jpg)
TechTarget中国
SQL Server 2008提供了上百个系统视图,这些视图可以让你查看数据库和服务器元数据,而无需访问真正的数据源。系统分类视图的目录在通过数据库引擎提取信息时特别有用。SQL Server目录视图是视图的集合,为目录元数据提供通用的接口。
通过目录视图你能访问到的信息量是非常广泛的。例如,使用目录视图提取关于特定数据库中表和视图的信息。或者提取关于安全对象,全文检索,数据库镜像,分区或者各种其它目录相关的信息。
SQL Server目录视图可以按功能线分成子分类,比如数据库对象视图和安全视图。在本文中,我为你提供了这样几种子分类的视图示例。我在SQL Server 2008的一个本地实例上创建了这些示例。在那些需要指定具体数据库的例子中,我使用的是“AdventureWorks 2008”数据库。然而,要注意,我在示例查询中展示的返回结果是与我的SQL Server实例有关的。如果你在你自己的环境中运行这些示例,你可能会得到不同的结果。
对于我演示的每个目录视图(以及所有一般目录视图),SQL Server在SQL Server联机丛书上提供了针对这些视图的帮助主题。由于每个视图返回的信息类型不同,你会希望通过访问该主题阅读每个视图的详细信息的。
数据库和文件目录视图
我们要了解的第一组SQL Server目录视图允许你访问关于SQL Server实例中安装的数据库信息,以及与那些数据库相关的文件信息。在下面的例子中,我利用“sys.databases”目录视图来提取数据库列表,要求查询名称以“adventureworks”开头的数据库。
SELECT name AS DbName, database_id AS DatabaseID, user_access AS UserAccess, user_access_desc AS AccessDescript FROM sys.databases WHERE name LIKE 'adventureworks%'; |
正如“SELECT”语句中显示的,你访问目录视图就跟你访问其它视图一样。在这种情况下,我在“FROM”从句中使用了“sys.databases ”视图来提取实例数据库的详细信息。要得到该视图支持的列清单,以及每列的描述信息,请参见该视图在SQL Server联机丛书中的主题。这些描述信息包括在列中用作值的代码解释。例如,该主题解释了存储在“user_access ”列中的代码,展示了数据库是允许多用户访问(用“0”表示),还是只允许单用户访问(用“1”表示),还是限制用户访问(用“2”表示)。
在上面的“SELECT”语句中提取了每个“adventureworks”数据库的名称和ID,还有用户访问代码和代码描述。下面的表展示了我在我的SQL Server 2008本地实例中运行该查询时返回的结果:
DbName | DatabaseID | UserAccess | AccessDescript |
AdventureWorks | 7 | 0 | MULTI_USER |
AdventureWorks2008 | 8 | 0 | MULTI_USER |
AdventureWorksDW2008 | 10 | 0 | MULTI_USER |
可见,我在我的系统中安装了三个“adventureworks”数据库。默认情况下,用户访问代码“0”被赋给每个数据库。用户访问代码描述显示在列“user_access_desc”,它表示每个数据库都支持“MULTI_USER”用户访问。
SQL Server还提供了一个目录视图,允许你提取关于数据库文件的信息。在下面的“SELECT”语句中,我利用“sys.master_files”视图来访问有关“AdventureWorks 2008”数据库文件的详细信息:
SELECT file_id AS FileID, name AS LogicalName, type AS FileType, type_desc AS TypeDescript FROM sys.master_files WHERE database_id IN ( SELECT database_id FROM sys.databases WHERE name = 'AdventureWorks2008' ); |
对于与“AdventureWorks2008”数据库关联的每个文件,我都提取了文件ID,文件的逻辑名称,文件类型代码,以及解释类型代码的描述。另外,请参考与“sys.master_files”目录视图有关的主题获取关于该列的更多信息。
请注意,为了提取正确的数据,我的“WHERE”从句中包含有一个从“sys.databases ”查询数据库ID的子查询。这使我可以访问文件信息,无需知道ID,只要知道数据库名称即可。
SQL Server元数据函数
SQL Server提供了一组元数据函数,可以使你执行诸如提取数据库ID这类操作。在本文中,我没有使用元数据函数,这样我可以更好地展示各种目录视图。您可以在SQL Server联机丛书的“元数据函数(Transact-SQL)”专题中找到关于这些函数的更多介绍。比如函数“DB_ID”可以提取数据库ID,有助于避免使用子查询。
在我提取了数据库ID之后,我可以限制只查询我指定的数据库。下面的结果展示了关于“AdventureWorks 2008”数据库的返回信息:
FileID | LogicalName | FileType | TypeDescript |
1 | AdventureWorks2008_Data | 0 | ROWS |
2 | AdventureWorks2008_Log | 1 | LOG |
65537 | FileStreamDocuments | 2 | FILESTREAM |
另一个SQL Server目录视图是“sys.database_files”。这个视图与“sys.master_files”视图类似,只是它需要指定一个数据库。在下面的例子中,我首先使用了一个“USE”语句,明确使用“AdventureWorks 2008”数据库,然后我运行“SELECT”语句来从“sys.database_files”提取数据:
在本例中,我提取了文件ID,逻辑文件名,文件类型,当前状态,以及文件大小。下面的结果展示了该语句返回的信息(使用的是我的系统环境):
FileID | FileName | TypeDescript | StateDescript | Size |
1 | AdventureWorks2008_Data | ROWS | ONLINE | 24928 |
2 | AdventureWorks2008_Log | LOG | ONLINE | 256 |
65537 | FileStreamDocuments | FILESTREAM | ONLINE | 0 |
正如查询结果所展示的,有三个文件与“AdventureWorks 2008”数据库有关联。通过使用“ sys.database_files”目录视图,我能很容易地访问每个文件中的数据。您可以在SQL Server联机丛书中的“数据库与文件目录视图(Transact-SQL)”中获得关于该话题的更多信息,然后再查询指定的视图。
翻译
相关推荐
-
SQL Server 2008将退出微软主流数据库支持
你的企业是否还在运行SQL Server 2008?请注意微软为SQL Server 2008提供的主流技术支持服务将于今年的7月8日正式结束。
-
Oracle SQL:使用分析排序函数
我们开发了一个应用程序,用来记录高尔夫巡回赛中的分数排名。其中我正在使用SQL来写一段代码,以根据分数来对选手进行前三名的排序。
-
SQL Server 2008中的对称密钥加密
证书和非对称密钥使用数据库级的内部公钥加密数据,并且使用数据库级内部私钥解密数据。而对称密钥相对简单,它们包含一个同时用来加密和解密的密钥。
-
通过PassPhrase对SQL Server 2008加密
与数字证书类似,SQL Server 证书包括公钥和私钥这一对密钥,它们都用来加密和解密数据。SQL Server也拥有创建非对称密钥和对称密钥对象的能力。