Как показать все таблицы с определенным количеством записей - PullRequest
1 голос
/ 16 ноября 2010

есть ли способ показать все таблицы с определенным количеством записей?

Ответы [ 4 ]

2 голосов
/ 16 ноября 2010

Для почти 100% точности:

select object_schema_name(object_id) as schema_name, 
    object_name(object_id) as object_name,
    sum(p.rows)
from sys.partitions p
where index_id in (1,0)
group by object_id
having sum(p.rows) = @numberOfRows;

Для истинной 100% точности вы должны COUNT(*) от курсора

1 голос
/ 16 ноября 2010

COUNT от курсора:

Declare @NumberOfRecords Integer
Set @NumberOfRecords = 100

Create Table #Tables(TableName SysName)
Declare @More Bit
Declare CTable Cursor Local Fast_Forward For Select Table_Name From Information_Schema.Tables Where Table_Type = 'Base Table'
Declare @CTableName SysName
Declare @SQL National Character Varying(4000)

Set @More = 1
Open CTable

While (@More = 1)
Begin
  Fetch Next From CTable Into @CTableName
  If (@@Fetch_Status != 0)
    Set @More = 0
  Else
  Begin
    Set @SQL = N'If (Select Count(*) From [' + @CTableName + ']) = ' + Cast(@NumberOfRecords As National Character Varying) + N' ' +
               N'Insert Into #Tables(TableName) Values(''' + @CTableName + N''')'
    Execute (@SQL)
  End
End

Close CTable
Deallocate CTable

Select * From #Tables
Drop Table #Tables
1 голос
/ 16 ноября 2010

Ммм

Быстрый и грязный путь:

sp_MSForeachtable 'select ''?'' tblName, count(*) from ? where count(*) = X'

Это должно выводить только те строки с X записями

1 голос
/ 16 ноября 2010

В этом сообщении есть хороший запрос, чтобы сделать именно это (а также количество столбцов и размеры строк):

USE DatabaseName
GO

CREATE TABLE #temp (
       table_name sysname ,
       row_count INT,
       reserved_size VARCHAR(50),
       data_size VARCHAR(50),
       index_size VARCHAR(50),
       unused_size VARCHAR(50))

SET NOCOUNT ON

INSERT #temp
EXEC sp_msforeachtable 'sp_spaceused ''?'''

SELECT a.table_name,
       a.row_count,
       COUNT(*) AS col_count,
       a.data_size
FROM #temp a
INNER JOIN information_schema.columns b
      ON a.table_name collate database_default = b.table_name collate database_default
GROUP BY a.table_name, a.row_count, a.data_size
ORDER BY CAST(REPLACE(a.data_size, ' KB', '') AS integer) DESC

DROP TABLE #temp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...