2010-11-16 3 views

Répondre

1

Hmmm

façon rapide et sale:

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

Ceci devrait seulement produire ces lignes avec des enregistrements X

1

This post a une belle requête pour faire cela (ainsi que le nombre de colonnes et de la taille des lignes):

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

Pour une précision de près de 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; 

Pour une véritable précision de 100%, vous devez COUNT(*) à partir d'un curseur

+0

+1 Pour des commentaires de précision. Les méta-données sont rapides mais peuvent ne pas être correctes! – JNK

1

COUNT d'un curseur:

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 
Questions connexes