2016-12-07 7 views
0

私はこのクエリが実行されている場所とは異なるデータベースにあるテーブルの行数を取得しようとしています。下の私の例では、という名前のデータベースがあり、そのテーブルにTestTable2という名前のテーブルがあり、行の数を取得しようとしています。ここでは、データベース内のすべてのテーブルの行数を取得するために働くクエリです:クエリが実行される場所とは異なるデータベースにあるテーブルの行数を取得するにはどうすればよいですか?

SELECT p.[rows] AS [Num_Rows] 
    , OBJECT_NAME(i.OBJECT_ID) AS [Table_Name] 
FROM TestDb.sys.indexes AS i 
    INNER JOIN TestDb.sys.partitions AS p 
     ON p.OBJECT_ID = i.OBJECT_ID 
     AND p.index_id = i.index_id 
    INNER JOIN TestDb.sys.allocation_units AS a 
     ON a.container_id = p.partition_id 
    INNER JOIN TestDb.sys.tables AS t 
     ON i.OBJECT_ID = t.OBJECT_ID 
WHERE i.type <= 1 
    AND a.type = 1 
    AND t.type = 'U' 
    AND t.is_ms_shipped = 0 

は、しかし、私はそれだけで私が興味のテーブルを返しますので、where句にフィルタを追加しようとすると、

AND OBJECT_NAME(i.OBJECT_ID) = 'TestTable2' 

は、私が最初のクエリからの結果でTestTable2表を見ることができますが、私はその最後のフィルタを追加するとき、何も返されません:クエリは、もはや任意の結果を返しません。 TestDbデータベースから直接追加したフィルタでこの同じクエリを実行すると、問題なく実行されます。私は何が欠けていますか?

答えて

1

あなたは、私が

+0

't.name'は私が必要なものであるにもかかわらず、正しくあなたの質問を理解していないことを確認、この

select t.name, i.rows from yourdatabase.sys.tables t inner join yourdatabase.sys.sysindexes i on t.object_id = i.id where i.indid < 2 and t.name = 'yourtable' 

のようなクエリを試すことができます。ありがとうございます! –

関連する問題