Is het mogelijk om met een query alle tabel namen in een database te weergeven die geen records hebben?
Het gaat om een Microsoft DB Server (MSSQL)

Te snel gesproken, oplossing gevonden
SELECT 
    t.NAME AS TableName,
    i.name as indexName,
    p.[Rows],
    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, p.[Rows]
ORDER BY 
    object_name(i.object_id) 
Bedoel je in een query waarin je dynamisch de tabelnamen ophaalt en dan checkt of er records in zitten? Dan niet denk ik. Als je vooraf de namen gedefinieerd hebt (in elk geval voor de query), dan is het wel mogelijk. In dat geval zou je een count query voor elke tabel kunnen laten lopen en via een union die allemaal bij elkaar kunnen zetten. Zoiets bijvoorbeeld:

SELECT tabel_naam, aantal_records
FROM (
  SELECT 'tabel1' AS tabel_naam, COUNT(*) as aantal_records
  FROM tabel1
  UNION 
  SELECT 'tabel2', COUNT(*)
  FROM tabel2
)
WHERE aantal_records = 0;

Wil je het echter dynamisch doen dan moet je selecteren uit een tabel naam die zelf in feite een parameter is. Bij mijn weten is dat niet mogelijk in SQL (maar wie beter weet: verbeter me).

Reageren