尝试在 MS SQL 服务器上运行更复杂的 SQL 查询,但没有数据输出。从逻辑上讲应该没问题,但我不明白为什么它不起作用:
SELECT D.NAME DATABASE_NAME,T.NAME TABLE_NAME,I.NAME INDEX_NAME,C.NAME COLUMN_NAME FROM sys.dm_db_index_physical_stats (NULL, NULL, NULL , NULL, 'LIMITED') XXX INNER JOIN SYS.DATABASES D ON D.DATABASE_ID = XXX.DATABASE_ID INNER JOIN SYS.TABLES T ON T.OBJECT_ID = XXX.OBJECT_ID INNER JOIN SYS.INDEXES I ON I.OBJECT_ID = T.OBJECT_ID INNER JOIN SYS.INDEX_COLUMNS IC ON IC.OBJECT_ID = I.OBJECT_ID INNER JOIN SYS.COLUMNS C ON C.OBJECT_ID = IC.OBJECT_ID ORDER BY D.NAME, T.NAME
如果我运行SELECT * FROM sys.dm_db_index_physical_stats (NULL, NULL, NULL , NULL, 'LIMITED')
,我会得到正确的数据,所以其他查询应该可以工作,但仍然不行。
有任何想法吗?
答案1
我想象您正在主系统中运行它。sys.dm_db_index_physical_stats 报告在全局级别,其他表在数据库级别。
你可以通过 USE 并执行以下命令来确认应该查看返回的数据。您可能还想使用 sp_msforeachDB (http://weblogs.sqlteam.com/joew/archive/2008/08/27/60700.aspx) 在每个数据库中执行代码。