2015-01-15 2 views
3

Моя цель - создать таблицу всех таблиц в текущей базе данных, которая будет отображать имя таблицы и количество строк в каждой таблице. Бонус должен также быть способен отображать, когда что-либо было в последний раз введено или изменено в таблице. Я не уверен, что последняя часть возможна.SQL, чтобы найти количество строк в таблице в базе данных

Это то, что у меня есть до сих пор ... его ничего особенного, но я просто не могу побить голову, как добавить к нему количество строк в таблице.

SELECT name, type, type_desc 
FROM [scheme].sys.all_objects 
WHERE type = 'U' 
+0

У всех таблиц есть одна и та же схема? Имена столбцов одинаковы? –

+0

@Nadeem_MK да, все они имеют одну и ту же схему. Я просто заменю [схему] своим именем базы данных. У нас есть глупое количество таблиц, мы в основном хотим получить список таблиц с данными, чтобы увидеть, даже если они используются. К сожалению, у них также нет одинаковых имен столбцов. –

ответ

3

Вы можете использовать этот запрос в отношении системного каталога:

SELECT 
    t.NAME AS TableName, 
    p.rows AS RowCounts 
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 
    t.NAME NOT LIKE 'dt%' 
    AND t.is_ms_shipped = 0 
    AND i.OBJECT_ID > 255 
GROUP BY 
    t.Name, p.Rows 
ORDER BY 
    t.Name 

, чтобы получить желаемый результат - все таблицы в текущей базе данных, и количество строк в каждой.

+0

Спасибо, он работает отлично и удивительно быстрее, чем я ожидал. Просто вопрос, возможно ли получить дату, когда какие-либо изменения были внесены в любую таблицу в базе данных? –

+1

@ 5tar-Kaster: нет, эта метка времени не хранится SQL Server и недоступна. –

1
CREATE TABLE #T 
(TABLENAME VARCHAR(100) , 
COUNT INT) 
INSERT INTO #T 
EXEC SP_MSFOREACHTABLE 'SELECT ''?'' ,COUNT(*) FROM ?' 
SELECT * FROM #T 
DROP TABLE #T 
+0

Пожалуйста, не отправляйте ответы только на код и вместо этого давайте объяснение относительно того, что делает ваш код –

+0

. Это работает на 100% быстрее, чем выше ответ на @marc_s, но он по-прежнему работает, спасибо –

Смежные вопросы