Пытаюсь выполнить более сложный SQL-запрос на сервере MS 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')
, Я получаю правильные данные, поэтому другой запрос должен работать, но все равно не работает.
Любые идеи?
Я предполагаю, что вы запускаете это в главном ... sys.dm_db_index_physical_stats отчеты на глобальном уровне, другие таблицы на уровне базы данных.
вы можете подтвердить это, выполнив ИСПОЛЬЗОВАНИЕ и выполнив должен увидеть возвращенные данные. Вы также можете использовать sp_msforeachDB ( http://weblogs.sqlteam.com/joew/archive/2008/08/27/60700.aspx) для выполнения кода в каждой базе данных.