web-dev-qa-db-ja.com

MS SQL 2008-すべてのテーブル名とDBの行数を取得

アプリケーション(他の人が開発した)を介してデータ更新の影響を受けるテーブルを特定しようとしています。 DBには200を超えるテーブルがあり、各テーブルの変更をチェックしないようにしたいと思います。

すべてのテーブル名と行数を一覧表示できる他の方法はありますか?

select table_name from information_schema.tables

DB購入のすべてのテーブルをリストします。行数も含めるにはどうすればよいですか。

37
chinna_82
SELECT sc.name +'.'+ ta.name TableName
 ,SUM(pa.rows) RowCnt
 FROM sys.tables ta
 INNER JOIN sys.partitions pa
 ON pa.OBJECT_ID = ta.OBJECT_ID
 INNER JOIN sys.schemas sc
 ON ta.schema_id = sc.schema_id
 WHERE ta.is_ms_shipped = 0 AND pa.index_id IN (1,0)
 GROUP BY sc.name,ta.name
 ORDER BY SUM(pa.rows) DESC

こちらをご覧ください:

73
podiluska

データベース内のすべてのテーブルを取得するには:

select * from INFORMATION_SCHEMA.TABLES

データベース内のすべての列を取得するには:

select * from INFORMATION_SCHEMA.columns

データベース内のすべてのビューを取得するには:

select * from INFORMATION_SCHEMA.TABLES where table_type = 'view'
4
kavitha Reddy

完全を期して掲載。

all の行数を探している場合 all データベース(私が探していたものでした)-そして、私は thisthis のこの組み合わせが動作することを発見しました。最適かどうかはわかりません:

SET NOCOUNT ON
DECLARE @AllTables table (DbName sysname,SchemaName sysname, TableName sysname, RowsCount int )
DECLARE
     @SQL nvarchar(4000)
SET @SQL='SELECT ''?'' AS DbName, s.name AS SchemaName, t.name AS TableName, p.rows AS RowsCount FROM [?].sys.tables t INNER JOIN sys.schemas s ON t.schema_id=s.schema_id INNER JOIN [?].sys.partitions p ON p.OBJECT_ID = t.OBJECT_ID'

INSERT INTO @AllTables (DbName, SchemaName, TableName, RowsCount)
    EXEC sp_msforeachdb @SQL
SET NOCOUNT OFF
SELECT DbName, SchemaName, TableName, SUM(RowsCount), MIN(RowsCount), SUM(1)
FROM @AllTables
WHERE RowsCount > 0
GROUP BY DbName, SchemaName, TableName
ORDER BY DbName, SchemaName, TableName
0
OldCurmudgeon

これを試してみてください、それは簡単で速いです

SELECT T.name AS [TABLE NAME], I.rows AS [ROWCOUNT] 
FROM   sys.tables AS T 
   INNER JOIN sys.sysindexes AS I ON T.object_id = I.id 
   AND I.indid < 2 ORDER  BY I.rows DESC
0
Muhammad Sohail