Попытка подсчитать отдельные записи в каждой таблице базы данных

#sql #sql-server #count #distinct

#sql #sql-сервер #подсчет #distinct

Вопрос:

У меня есть запрос, который дает мне общее количество записей в каждой таблице базы данных:

 SELECT QUOTENAME('MyDb')   '.'   QUOTENAME(SCHEMA_NAME([sOBJ].schema_id))  
'.'   QUOTENAME([sOBJ].[name]) AS [TableName], SUM([sPTN].[Rows]) AS [RowCount]
FROM [MyDB].[sys].[objects] AS [sOBJ]
INNER JOIN [sys].[partitions] AS [sPTN]
ON [sOBJ].object_id = [sPTN].object_id
WHERE  [sOBJ].[type] = 'U'
AND [sOBJ].[is_ms_shipped] = 0x0
AND [index_id] < 2 -- 0:Heap, 1:Clustered
GROUP BY [sOBJ].schema_id, [sOBJ].[name]
 

Что я пытаюсь сделать, так это также получить количество отдельных записей для каждой таблицы в базе данных. Я пробовал использовать циклы While и CTE s, но, похоже, не могу понять это правильно. Не уверен, что это правильная методология.

Заранее спасибо.

Комментарии:

1. различаются по всем столбцам для каждой таблицы? если у вас есть PK в каждой таблице, то каждая строка различна, я думаю, это не то, что вы можете сделать легко, вам нужно знать имена столбцов, которые определяют различие в каждой таблице

2. Вам нужна статистика индекса или статистика таблицы, но я не видел способа запросить их напрямую. Единственным верным способом было бы буквально выбрать distinct * для подсчета строк, и это довольно ужасно.

3. Спасибо вам обоим за ваш ответ, я тоже так думал, но не был уверен, что был прав.

4. HAVING SUM([sPTN].[Rows]) = 1 ? Или заменить SUM на COUNT(*) в SELECT и использовать HAVING COUNT(*) = 1 ?