我有一个用来列出数据库的查询:
SELECT * FROM sys.databases但此查询在SQL Server 2000中不起作用。
以下查询适用于SQL Server 2000及更高版本:
SELECT NAME FROM sysdatabases;我找到了this article,它有一些关于sys.database的注释(还指定出于兼容性的原因而保留了sysdatabase)。
我想知道的是,是否有任何理由不应该使用sysdatabases来获取数据库名称列表?除了使用sys.databases是更新的风格之外,我没有在其他地方看到任何东西。
发布于 2015-12-03 23:59:38
我可以想到以下几个原因:
包含此SQL Server 2000系统表是为了实现向后兼容。我们建议您改用当前的SQL Server系统视图。若要查找等效的一个或多个系统视图,请参阅将SQL Server2000系统表映射到SQL Server2005系统视图。 Microsoft SQL Server的未来版本中将删除此功能。请避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。
换句话说:是的,您可以使用sysdatabases,但是一旦发布了不再支持sysdatabases的SQL Server版本,您可能需要重写所有内容。
sysdatabases)在SQL Server2000中保持“原样”,不会获得新功能。因此,它们包含less information than their new counterparts:兼容性视图公开的元数据与SQL Server2000中提供的元数据相同。但是,兼容性视图不公开与SQL Server2005及更高版本中引入的功能相关的任何元数据。因此,使用新功能(如Service Broker或分区)时,必须切换到使用目录视图。
发布于 2015-12-04 00:01:55
SELECT name FROM sysdatabases在它检查之后-
SELECT *
FROM sys.dm_os_performance_counters
WHERE object_name LIKE '%Deprecated Features%'
AND instance_name = 'sysdatabases'
AND cntr_value > 0并阅读有关弃用对象的信息。
简而言之:如果可能的话,试着只使用sys schema中的对象
SELECT * FROM sys.databaseshttps://stackoverflow.com/questions/34070483
复制相似问题