資料庫設為 SQL Server 2000 相容模式(80)後,無法使用 DMV/DMF。
相容模式僅影響 T-SQL 語法解析、查詢計劃行為等,不影響系統物件(DMV/DMF)的可用性。資料庫內部版本號會隨升級而改變,與相容模式無關。
在相容模式 80 下,無法在 DMV 參數中直接呼叫函數(如 DB_ID('dbname')、OBJECT_ID('table')),會報語法錯誤。但 DMV 本身支援。
-- 在相容模式 90+ 的資料庫(如 master)執行
USE master;
SELECT * FROM sys.dm_db_index_physical_stats(
DB_ID('DMVTest'), -- database_id
OBJECT_ID('DMVTest..t1'), -- object_id:三段式命名關鍵!
NULL, NULL, 'DETAILED');
注意:OBJECT_ID 必須使用三段式(DB..table),否則會在當前資料庫尋找物件導致錯誤。
DECLARE @dbid INT = DB_ID('DMVTest');
DECLARE @objid INT = OBJECT_ID('t1'); -- 在相容模式 80 資料庫內執行此行
SELECT * FROM sys.dm_db_index_physical_stats(@dbid, @objid, NULL, NULL, 'DETAILED');
sys.dm_db_index_physical_stats 技術上是 DMF(動態管理函數),傳 NULL 會掃描所有索引,成本極高,生產環境慎用。