Подтвердить что ты не робот

SQL Server 2008: у меня 1000 таблиц, мне нужно знать, какие таблицы имеют данные

Есть ли способ в SMSS определить, имеет ли таблица какие-либо записи? Мне нужно получить список таблиц с записями. возможно, есть инструкция sql, которая сделает трюк?

4b9b3361

Ответ 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