【问题标题】:DMV issues for databases in compatibility_level "80"兼容性级别“80”中的数据库的 DMV 问题
【发布时间】:2015-02-27 12:55:38
【问题描述】:

我有许多兼容性级别为 80 (SQL Server 2000) 的数据库; 我需要执行以下操作:

select 
    sf.fileid, sf.groupid, sf.name, sf.filename, mf.database_id 
from 
    sys.sysfiles sf
JOIN 
    sys.master_files mf ON sf.filename = mf.physical_name COLLATE DATABASE_DEFAULT
CROSS APPLY 
    sys.dm_os_volume_stats (mf.database_id, sf.fileid)

但我收到以下错误:

消息 102,第 15 级,状态 1,第 4 行
'.' 附近的语法不正确。

我无法更改兼容模式,也不知道如何从主数据库的上下文中为我的数据库运行此特定脚本。

【问题讨论】:

  • 你能发布样本数据和想要的结果吗?什么是 sys.dm_os_volume_stats?
  • SQL Server 2000 已经过时且已弃用 - 是时候升级了(甚至只是您的兼容级别)!并且 SQL Server 2000 没有任何 sys. 目录视图 - 您将无法使用此查询。如果您绝对必须为 SQL Server 2000 提供此功能 - 您必须将 sys.sysfiles 等重写为旧视图,并且您可以忘记 dm_os_volume_stats,因为没有类似的东西(DMV - 动态管理视图)当时存在。 ....
  • 大多数特定于数据库的视图可以以实际数据库名称 (mydb.sys.sysfiles) 作为前缀,然后从具有更高兼容级别的另一个数据库运行。如果这不切实际,您将不得不硬着头皮升级。提高兼容性级别很少有什么大不了的,无论如何您都必须在某一时刻这样做。可能的问题请咨询this list

标签: sql sql-server tsql


【解决方案1】:

在 SQL Server 2000 中没有“sys”文件。许多有等价物,您可以在以下位置看到一个很好的图表:

http://www.mssqltips.com/sqlservertip/1037/system-information-in-sql-server-2000-vs-sql-server-2005/

例如在 2000 年有一个 dbo.sysfiles 但没有 sys.sysfiles。这些表不一定包含相同的列.....

【讨论】:

    【解决方案2】:

    在早期版本的 SQL 中以及在旧兼容模型中运行的数据库中不允许使用“CROSS APPLY”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-08
      • 2016-10-19
      • 2021-12-08
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多