首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server sys.databases vs SQL数据库?

SQL Server sys.databases vs SQL数据库?
EN

Stack Overflow用户
提问于 2015-12-03 23:56:49
回答 2查看 9.3K关注 0票数 6

我有一个用来列出数据库的查询:

代码语言:javascript
复制
SELECT * FROM sys.databases

但此查询在SQL Server 2000中不起作用。

以下查询适用于SQL Server 2000及更高版本:

代码语言:javascript
复制
SELECT NAME FROM sysdatabases;

我找到了this article,它有一些关于sys.database的注释(还指定出于兼容性的原因而保留了sysdatabase)。

我想知道的是,是否有任何理由不应该使用sysdatabases来获取数据库名称列表?除了使用sys.databases是更新的风格之外,我没有在其他地方看到任何东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-03 23:59:38

我可以想到以下几个原因:

包含此SQL Server 2000系统表是为了实现向后兼容。我们建议您改用当前的SQL Server系统视图。若要查找等效的一个或多个系统视图,请参阅将SQL Server2000系统表映射到SQL Server2005系统视图。 Microsoft SQL Server的未来版本中将删除此功能。请避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。

换句话说:是的,您可以使用sysdatabases,但是一旦发布了不再支持sysdatabases的SQL Server版本,您可能需要重写所有内容。

兼容性视图公开的元数据与SQL Server2000中提供的元数据相同。但是,兼容性视图不公开与SQL Server2005及更高版本中引入的功能相关的任何元数据。因此,使用新功能(如Service Broker或分区)时,必须切换到使用目录视图。

票数 7
EN

Stack Overflow用户

发布于 2015-12-04 00:01:55

代码语言:javascript
复制
SELECT name FROM sysdatabases

在它检查之后-

代码语言:javascript
复制
SELECT *
FROM sys.dm_os_performance_counters
WHERE object_name LIKE '%Deprecated Features%'
    AND instance_name = 'sysdatabases'
    AND cntr_value > 0

并阅读有关弃用对象的信息。

简而言之:如果可能的话,试着只使用sys schema中的对象

代码语言:javascript
复制
SELECT * FROM sys.databases
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34070483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档