1

sp_MSforeachtableデータベース内の特定のテーブルの行数を取得するために使用しています。これらを名前順に並べたい。

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

4

6 に答える 6

6

EXEC sp_MSforeachtable @SQL、@whereand = 'ORDER BY 1'

于 2014-07-02T19:27:51.757 に答える
2

あなたはそうしない :-)

代わりに、この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) 

マーク

于 2009-08-24T15:45:08.677 に答える
2

このリンクから: http://web.archive.org/web/20080701045806/http://sqlserver2000.databases.aspfaq.com:80/how-do-i-get-a-list-of-sql-server- tables-and-ther-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
于 2009-08-24T15:49:06.847 に答える
1

1つの方法は、一時テーブルを作成し、それに挿入/実行することです。次に、一時テーブルでselect /orderbyを実行します。

于 2009-08-24T15:45:24.717 に答える
1

これらのいずれかがそれを行う必要があります。

EXEC sp_MSforeachtable @command1 = "SELECT count(*) as '?' FROM ? "、@whereand = 'ORDER BY 1'

EXEC sp_MSForEachTable 'SELECT ''?'', COUNT(*) FROM ?', @whereand = 'ORDER BY 1'

「@whereand = 'ORDER BY 1'」についてのChris_Rへの称賛-私は賛成しますが、そうする担当者がいません。

于 2014-08-04T10:47:50.037 に答える