2009-08-24 15 views
1

私はsp_MSforeachtableを使用して、データベース内の特定のテーブルの行数を取得しています。私はこれらを名前で注文します。sp_MSforeachtable order by

ORDER BY句をsp_MSforeachtableに追加するにはどうすればよいですか?

答えて

2

http://sqlserver2000.databases.aspfaq.com/how-do-i-get-a-list-of-sql-server-tables-and-their-row-counts.html

これは、メタデータテーブルを用いる方法が唯一の推定値を返します正しいカウントを返します。

(リンクからは若干異なる)、このプロシージャを作成:

CREATE PROCEDURE dbo.listTableRowCounts 
AS 
BEGIN 
    SET NOCOUNT ON 

    CREATE TABLE #foo 
    ( 
     tablename VARCHAR(255), 
     rc INT 
    ) 

    INSERT #foo 
     EXEC sp_msForEachTable 
      'SELECT PARSENAME(''?'', 1), 
      COUNT(*) FROM ? WITH (NOLOCK)' 

    SELECT tablename, rc 
     FROM #foo 
     ORDER BY tablename 

    DROP TABLE #foo 
END 
GO 
+0

これは現在死んだリンクです:-( –

3

あなたは:-)

だけではなく、このSQLスクリプトを使用していない - 非常に使いやすくし、より多くの設定可能 - あなたが望むように、あなたは、並べ替えることができます!

SELECT 
    t.NAME AS TableName, 
    i.name as indexName, 
    sum(p.rows) as RowCounts, 
    sum(a.total_pages) as TotalPages, 
    sum(a.used_pages) as UsedPages, 
    sum(a.data_pages) as DataPages, 
    (sum(a.total_pages) * 8)/1024 as TotalSpaceMB, 
    (sum(a.used_pages) * 8)/1024 as UsedSpaceMB, 
    (sum(a.data_pages) * 8)/1024 as DataSpaceMB 
FROM 
    sys.tables t 
INNER JOIN  
    sys.indexes i ON t.OBJECT_ID = i.object_id 
INNER JOIN 
    sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id 
INNER JOIN 
    sys.allocation_units a ON p.partition_id = a.container_id 
WHERE 
    t.NAME NOT LIKE 'dt%' AND 
    i.OBJECT_ID > 255 AND 
    i.index_id <= 1 
GROUP BY 
    t.NAME, i.object_id, i.index_id, i.name 
ORDER BY 
    object_name(i.object_id) 

マルク・

+1

+1は正しい方法です。あまりにもあなたがすべてのページ数を表示するが、実際の行数は表示されない;) 'sum(sys.partitions.rows)' –

+0

ありがとう、Remus!それはラインのどこかで失われたにちがいないでしょう..... –

2

一つの方法は、それに実行/挿入し、一時テーブルを作成することです。次に、テンポラリテーブルでselect/order byを実行します。このリンクから

3

EXEC sp_MSforeachtable @SQL、@whereand = 'ORDER BY 1' は、これらのどちらかがそれを行う必要があります

+0

あなたの答えにいくつかのコメントを追加してください –

0

EXEC sp_MSforeachtable @ command1 = "SELECT count(*)を '?' '?

EXEC sp_MSForEachTable' SELECT '「、@whereand = '1 BY ORDER''? 'から、COUNT(*)FROM?'、@whereand = 'ORDER BY 1'

賞賛Chris_Rのため"@場所= 'ORDER BY 1'" - 私はupvoteをするだろうが、そうする担当者はいない。