Listar tabelas com 0 registros
27/10/2005
0
To tentando a um tempão. Listo a tabela com os nomes das tabelas de usuário, mas não consigo listar a quantidade de registros delas. Mesmo com subquerys fazendo counts...
Alguém pode me ajudar?
Valew mesmo.
Doug_chagas
Posts
27/10/2005
Wcrivelini
apesar de muito mal documentadas, as tabelas de sistema não são tão difíceis de se entender como pode parecer à primeira vista.
por exemplo: no caso que vc citou, basta consultar duas tabelas SYSOBJECTS e SYSINDEXES.
SYSOBJECTS traz todos os objetos da base, portanto vamos usar um filtro para trazermos apenas as tabelas de usuário (O.XTYPE = ´U´).
SYSINDEXES traz informação sobre os índices usados e uma das informações adicionais é exatamente o número de registros existentes na tabela.
portanto, um sql parecido com este aqui deve resolver o seu problema (*)
SELECT O.NAME AS TABELA, X.ROWCNT AS NUM_REGISTROS
FROM SYSOBJECTS O INNER JOIN SYSINDEXES AS X ON O.ID = X.ID
WHERE O.XTYPE = ´U´ AND X.ROWCNT = 0
(*) desculpe, não pude testar. minha máquina é nova e ainda não tem SQL instalado ....pois é, caso de ferreiro...
28/10/2005
Doug_chagas
Amigo, retorna varios registros para uma mesma tabela, pq na sysindexes existem vários registros para uma mesma tabela cada um com um valor em rowcnt, qual deles devo utilizar?
28/10/2005
Wcrivelini
mas taí: cada registro que vc vê corresponde às estatísticas de um dos índices da tabela. portanto devemos escolher o valor máximo de registros. na prática, este número faz parte das estatísticas da chave primária da tabela (em que cada registro da tabela corresponde a um valor do índice)
SELECT O.NAME AS TABELA, MAX(X.ROWCNT) AS NUM_REGISTROS
FROM SYSOBJECTS O INNER JOIN SYSINDEXES AS X ON O.ID = X.ID
WHERE O.XTYPE = ´U´ AND X.ROWCNT = 0
GROUP BY O.NAME
28/10/2005
Doug_chagas
SELECT O.NAME AS TABELA, MAX(X.ROWCNT) AS NUM_REGISTROS
FROM SYSOBJECTS O INNER JOIN SYSINDEXES AS X ON O.ID = X.ID
WHERE O.XTYPE = ´U´ --AND X.ROWCNT = 0
GROUP BY O.NAME
HAVING MAX(X.ROWCNT) = 0
Só precisa mudar isso senão ele lista errado. Ai funcionou. Valew mesmo. E realmente, a documentação dessas tabelas é uma merda.
Clique aqui para fazer login e interagir na Comunidade :)