【发布时间】: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