Avatar billede staaloe Nybegynder
26. november 2009 - 16:09 Der er 10 kommentarer

Select statements på alle Tables uden brug af kode.

Jeg vil gerne undersøge hvilke tabeller der er tomme og hvilke der indeholder rækker og evt hvor mange i en SQL Server database.

Ved hjælp af statementet "SELECT * FROM sysobjects WHERE type = 'U'", kan jeg få fat i alle tables i databasen.

Er det muligt at bruge resultatet af denne query som input i noget SQL således at jeg kan loope alle tables igennem og lave en query på disse. Måske i en stored procedure?
Det kan selvfølgelig lade sig gøre med noget C# kode omkring, men dette vil jeg helst undgå.

Venlig hilsen

staaloe
Avatar billede pi-hus Nybegynder
26. november 2009 - 16:19 #1
Ja, du kan lave en Stored Procedure, der gør det.

Start med en SP_TABLES, loop gennem den og hent tabel-navnet over i en variabel.

Brug variablen til at lave en ny SQL-sætning der tæller antal poster - og hent antallet ind i en anden variabel.

"Udskriv" så tabelnavn og antal poster ved hjælp af de to variabler.


Men måske findes der allerede en system-SP der kan det.
Har du undersøgt det?

Måske kan SP_TABLES det faktisk allerede....
Avatar billede arne_v Ekspert
26. november 2009 - 16:33 #2
Du har brug for en loekke. Du kan lave den loekke i din C# applikations kode eller du kan gemme loekken i en T-SQL stored procedure.

Forskellen er vel naermest ens.
Avatar billede staaloe Nybegynder
26. november 2009 - 16:57 #3
Tak
Avatar billede staaloe Nybegynder
26. november 2009 - 16:59 #4
Jeg kan ikke gennemskue hvordan jeg uddeler point...
Avatar billede arne_v Ekspert
26. november 2009 - 17:17 #5
Hvis den eller dem du vil tildele point allerede har lagt et "svar" kan du markere dem.

Hvis ikke må du bede den/dem ligge et "svar".
Avatar billede TLundThuen Nybegynder
08. december 2009 - 14:06 #6
Jeg har ofte kørt denne kode direkte på SQL serveren (SQL Server management studio). Giver dig lynhurtigt et overblik over antal rækker pr tabel i den valgte database:

FROM
    sysobjects so,
    sysindexes si
WHERE
    so.xtype = 'U'
    AND
    si.id = OBJECT_ID(so.name)
GROUP BY
    so.name
ORDER BY
    2 DESC
Avatar billede arne_v Ekspert
14. december 2009 - 03:05 #7
staaloe?
Avatar billede arne_v Ekspert
14. december 2009 - 03:06 #8
TLT>

Hvad pokker gør:

ORDER BY
    2 DESC

??
Avatar billede TLundThuen Nybegynder
14. december 2009 - 09:07 #9
den sorterer resultatet i kolonne 2 (antal af records i tabellen) i faldende orden
Avatar billede TLundThuen Nybegynder
14. december 2009 - 09:39 #10
jeg kan se at der mangler toppen i min kode mangler så hermed den korrekte kode:

SELECT
    [TableName] = so.name,
    [RowCount] = MAX(si.rows)
FROM
    sysobjects so,
    sysindexes si
WHERE
    so.xtype = 'U'
    AND
    si.id = OBJECT_ID(so.name)
GROUP BY
    so.name
ORDER BY
    2 DESC
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester