2010-11-16 5 views

ответ

1

Хммм

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

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

Это должно выводить только те строки, в которых записаны записи Х

1

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

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 
2

Для около 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(*) от курсора

+0

+1 Для точности комментария. Метаданные быстрые, но могут быть неверными! – JNK

1

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 
Смежные вопросы