Как выбрать строку, значат все таблицы в базе данных SQL SERVER [дубликат]

241
задан DineshDB 4 April 2018 в 01:41
поделиться

5 ответов

Следующий SQL даст Вам счетчик строк всех таблиц в базе данных:

CREATE TABLE #counts
(
    table_name varchar(255),
    row_count int
)

EXEC sp_MSForEachTable @command1='INSERT #counts (table_name, row_count) SELECT ''?'', COUNT(*) FROM ?'
SELECT table_name, row_count FROM #counts ORDER BY table_name, row_count DESC
DROP TABLE #counts

Выходные данные будут представлять собой список таблиц и их счетчиков строк.

Если требуется только общее число строк по всей базе данных, добавление

SELECT SUM(row_count) AS total_row_count FROM #counts

даст вам одно значение для общего количества строк во всей базе данных.

387
ответ дан 23 November 2019 в 03:14
поделиться

выберите все строки из представления information_schema.tables и выполните оператор count (*) для каждой записи, возвращенной из этого представления.

declare c_tables cursor fast_forward for
select table_name from information_schema.tables

open c_tables
declare @tablename varchar(255)
declare @stmt nvarchar(2000)
declare @rowcount int
fetch next from c_tables into @tablename

while @@fetch_status = 0
begin

    select @stmt = 'select @rowcount = count(*) from ' + @tablename

    exec sp_executesql @stmt, N'@rowcount int output', @rowcount=@rowcount OUTPUT

    print N'table: ' + @tablename + ' has ' + convert(nvarchar(1000),@rowcount) + ' rows'

    fetch next from c_tables into @tablename

end

close c_tables
deallocate c_tables
2
ответ дан 23 November 2019 в 03:14
поделиться

SQL Server 2005 или более поздняя версия дает довольно хороший отчет, показывающий размеры таблиц, включая количество строк и т. Д. Это в стандартных отчетах - это использование диска по таблице.

С программной точки зрения хорошее решение можно найти по адресу: http://www.sqlservercentral.com/articles/T-SQL/67624/

14
ответ дан 23 November 2019 в 03:14
поделиться

Я бы немного изменил решение Фредерика. Я бы использовал системную хранимую процедуру sp_spaceused, которая также будет включать размеры данных и индексов.


declare c_tables cursor fast_forward for 
select table_name from information_schema.tables 

open c_tables 
declare @tablename varchar(255) 
declare @stmt nvarchar(2000) 
declare @rowcount int 
fetch next from c_tables into @tablename 

while @@fetch_status = 0 
begin 

    select @stmt = 'sp_spaceused ' + @tablename 

    exec sp_executesql @stmt

    fetch next from c_tables into @tablename 

end 

close c_tables 
deallocate c_tables 

3
ответ дан 23 November 2019 в 03:14
поделиться

Если вы хотите обойти время и ресурсы, необходимые для подсчета (*) ваших таблиц с 3 миллионами строк. Попробуйте сделать это по материалам SQL SERVER Central Кендала Ван Дейка.


Подсчет строк с помощью sysindexes Если вы используете SQL 2000, вам нужно использовать sysindexes, например:

-- Shows all user tables and row counts for the current database 
-- Remove OBJECTPROPERTY function call to include system objects 
SELECT o.NAME,
  i.rowcnt 
FROM sysindexes AS i
  INNER JOIN sysobjects AS o ON i.id = o.id 
WHERE i.indid < 2  AND OBJECTPROPERTY(o.id, 'IsMSShipped') = 0
ORDER BY o.NAME

Если вы используете SQL 2005 или 2008, запросы с использованием sysindexes будут работать, но Microsoft советует, что sysindexes могут быть удалены в будущей версии SQL Server, поэтому в качестве хорошей практики вам следует использовать DMVs, например:

-- Shows all user tables and row counts for the current database 
-- Remove is_ms_shipped = 0 check to include system objects 
-- i.index_id < 2 indicates clustered index (1) or hash table (0) 
SELECT o.name,
  ddps.row_count 
FROM sys.indexes AS i
  INNER JOIN sys.objects AS o ON i.OBJECT_ID = o.OBJECT_ID
  INNER JOIN sys.dm_db_partition_stats AS ddps ON i.OBJECT_ID = ddps.OBJECT_ID
  AND i.index_id = ddps.index_id 
WHERE i.index_id < 2  AND o.is_ms_shipped = 0 ORDER BY o.NAME 
194
ответ дан 23 November 2019 в 03:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: