SQL Server 2008: у меня есть 1000 таблиц, мне нужно знать, какие таблицы имеют данные - PullRequest
14 голосов
/ 20 октября 2010

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

Ответы [ 4 ]

23 голосов
/ 20 октября 2010

Попробуйте это - даст вам имя таблицы и количество строк:

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

Показывает все таблицы и их количество строк в одном выводе.

15 голосов
/ 20 октября 2010

Поскольку в вашем вопросе конкретно упоминается SSMS, вы также можете щелкнуть правой кнопкой мыши базу данных в проводнике объектов и затем из контекстного меню выполнить команду

Reports -> Standard Reports -> Disc Usage By Table

Screenshot

9 голосов
/ 20 октября 2010

Более простой синтаксис:

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
3 голосов
/ 20 октября 2010

Вы можете использовать эту хранимую процедуру:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...