我有一个查询,我用它来列出数据库:
SELECT * FROM sys.databases
但是这个查询在SQL Server 2000中不起作用。
以下查询在SQL Server 2000及更高版本中均有效:
SELECT NAME FROM sysdatabases;
我发现this article在sys.database
上有一些注释(并且还指出由于兼容性原因而保留了sysdatabases)。
我想知道的是,如果有任何原因我不应该使用sysdatabases
来获取数据库名称列表?除了使用sys.databases
是更新的风格之外,我还没有看到任何其他地方。
答案 0 :(得分:6)
我可以想到以下原因:
可能是removed in future versions(强调我的):
此SQL Server 2000系统表作为向后兼容性的视图包含在内。我们建议您使用当前的SQL Server系统视图。若要查找等效的系统视图或视图,请参阅将SQL Server 2000系统表映射到SQL Server 2005系统视图。 此功能将在未来版本的Microsoft SQL Server中删除。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。
换句话说:是的,您可以使用sysdatabases
,但是一旦发布了不再支持sysdatabases
的SQL Server版本,可能需要重写所有内容
保留兼容性视图(例如sysdatabases
)"因为它们是"在SQL Server 2000中并没有获得新功能。因此,它们包含less information than their new counterparts:
兼容性视图公开SQL Server 2000中可用的相同元数据。但是,兼容性视图不会公开与SQL Server 2005及更高版本中引入的功能相关的任何元数据。因此,在使用Service Broker或分区等新功能时,必须切换到使用目录视图。
答案 1 :(得分:1)
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.databases