アプリケーション(他の人が開発したもの)によるデータ更新の影響を受けるテーブルを特定しようとしています。DB には 200 を超えるテーブルがあり、それぞれの変更をチェックすることは避けたいと考えています。
行数とともにすべてのテーブル名を一覧表示できる他の方法はありますか?
select table_name from information_schema.tables
DB 内のすべてのテーブルを一覧表示します。行数も含めるにはどうすればよいですか?
アプリケーション(他の人が開発したもの)によるデータ更新の影響を受けるテーブルを特定しようとしています。DB には 200 を超えるテーブルがあり、それぞれの変更をチェックすることは避けたいと考えています。
select table_name from information_schema.tables
DB 内のすべてのテーブルを一覧表示します。行数も含めるにはどうすればよいですか?
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
これを参照してください:
データベース内のすべてのテーブルを取得するには:
select * from INFORMATION_SCHEMA.TABLES
データベース内のすべての列を取得するには:
select * from INFORMATION_SCHEMA.columns
データベース内のすべてのビューを取得するには:
select * from INFORMATION_SCHEMA.TABLES where table_type = 'view'
完全を期すために掲載。
すべてのデータベースのすべてのテーブルの行数を探している場合(これは私が探していたものです)、これとこれのこの組み合わせが機能することがわかりました。最適かどうかわかりません:
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