Есть ли способ в SMSS определить, имеет ли таблица какие-либо записи? Мне нужно получить список таблиц с записями. возможно, есть инструкция sql, которая сделает трюк?
SQL Server 2008: у меня 1000 таблиц, мне нужно знать, какие таблицы имеют данные
Ответ 1
Простейший синтаксис:
SELECT [Name] = o.name
, [RowCount] = SUM(p.row_count)
FROM SYS.DM_DB_PARTITION_STATS p
INNER JOIN
SYS.TABLES o
ON p.[object_ID] = o.[object_id]
WHERE index_id <= 1 -- Heap or clustered index only
GROUP BY o.name
ORDER BY 2 desc
Ответ 2
Попробуйте это - вы получите имя таблицы и количество строк:
SELECT
t.NAME AS TableName,
SUM(p.rows) AS [RowCount]
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
WHERE
i.index_id <= 1
GROUP BY
t.NAME, i.object_id, i.index_id, i.name
ORDER BY
SUM(p.rows) DESC
Он отображает все таблицы и их количество строк в одном выводе.
Ответ 3
Поскольку ваш вопрос специально упоминает SSMS, вы также можете щелкнуть правой кнопкой мыши базу данных в проводнике объектов, а затем из контекстного меню сделать
Reports -> Standard Reports -> Disc Usage By Table
Ответ 4
Вы можете использовать эту хранимую процедуру:
EXEC sp_MSforeachtable @command1="EXEC sp_spaceused '?'"
Это возвращает результат для каждой таблицы в базе данных (каждый из которых показывает имя и количество строк, среди другой информации).
Вот как вы можете поместить их в переменную таблицы и упорядочить их по количеству строк:
DECLARE @TBL TABLE (
[name] nvarchar(500),
[rows] bigint,
[reserved] nvarchar(500),
[data] nvarchar(500),
[index_size] nvarchar(500),
[unused] nvarchar(500)
)
INSERT INTO @TBL
EXEC sp_MSforeachtable @command1="EXEC sp_spaceused '?'"
SELECT * FROM @TBL
ORDER BY [rows] DESC