2014-08-28 84 views
-2

我想返回至少有一行數據的所有表格。選擇至少插入一行數據的所有表格

我用的是這樣的:

SELECT DISTINCT(OBJECT_NAME(OBJECT_ID)) 
FROM SYS.DM_DB_PARTITION_STATS ST 
WHERE ST.ROW_COUNT > 0 AND OBJECT_ID > 100 

但我不希望使用表SYS.DM_DB_PARTITION_STATS

我想知道另一種方法來查找這些表?

任何線索?

謝謝。

+1

*** ***爲什麼你想不使用'sys.dm_db_partition_stats'? ?任何特定的原因? – 2014-08-28 18:40:09

+0

「我想知道另一種方法來查找這些表?」,一個使用sysobjects並遍歷每個表的過程...使用動態sql和循環將結果修改爲臨時表並選擇形式,或者以其他方式跟蹤。但迭代雖然和動態SQL是我能想到的系統對象之外的方式。 – xQbert 2014-08-28 18:45:47

+2

@xQbert不,請不要'sysobjects',這是一個棄用的,向後兼容的視圖,你絕對不應該向人推薦。 – 2014-08-28 18:49:22

回答

0

你不應該使用sys.dm_db_partition_stats

4

你可以使用這樣的事情:

SELECT 
    t.NAME AS TableName, 
    p.rows AS RowCounts 
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 
WHERE 
    t.is_ms_shipped = 0 
    AND p.rows > 0 
GROUP BY 
    t.Name, p.Rows 
ORDER BY 
    t.Name 

將列出在他們的名稱和行數(> 0)的所有表。

使用sys.dm_db_partition_stats ....

+0

謝謝Marc_s!好一個。 – Deiwys 2014-08-28 18:57:42

+2

@issues仍然沒有提到爲什麼'sys.partitions'好,但是'sys.dm_db_partition_stats'不好。對於行數,他們都從同一個地方得到他們的信息(如果你正在尋找其他細節,他們只是有不同的信息)。 – 2014-08-28 19:33:26

+1

再次閱讀並嘗試查看我在哪裏寫下其不良使用'sys.dm_db_partition_stats'。我只是想知道另一種方式。請停止抱怨。 – Deiwys 2014-08-28 19:39:22

相關問題