Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Anzahl Datensätze aller Tabellen einer MSSQL Datenbank anzeigen
solick
myCSharp.de - Member



Dabei seit:
Beiträge: 56

Themenstarter:

Anzahl Datensätze aller Tabellen einer MSSQL Datenbank anzeigen

beantworten | zitieren | melden

verwendetes Datenbanksystem: <MSSQL Server 2008 Express>

Hallo,

ich wusste mal, wie ich das hinbekomme, hab mich aber schon länger nicht mehr mit komplexeren Abfragen beschäftigt. Ziel ist es, Alle Tabellen einer Datenbank mit der Anzahl der Datensätze anzuzeigen.

Mit SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES

bekomme ich alle Tabellennamen.

Nun möchte ich für jede Tabelle einfach einen Count Befehl ausführen:

SELECT COUNT(*) FROM TABLE_NAME

Am Ende sollen dann zwei Spalten exisiteren in der Abfrage: Tabellen name und das Ergebnis von Count.

Da ich meine Unterlagen aus dem Studium damals nicht dabei habe und im Internet auch nicht richtig fündig geworden bin hoffe ich auf einen Tipp von Euch.

Beste Grüße

Solick
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 9.972

beantworten | zitieren | melden

Wo hängt es denn?
Du kannst die TabellenNamen auslesen und du weisst wie man ein Count erstellt.

Welchen Teil bekommst du nicht hin?
private Nachricht | Beiträge des Benutzers
solick
myCSharp.de - Member



Dabei seit:
Beiträge: 56

Themenstarter:

beantworten | zitieren | melden

das verknüpfen in einer Abfrage.

Hab es schon probiert mit Ausdrücken wie:

SELECT * FROM (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES)

oder so ähnlich...

Mir fehlt gerade die Idee, wie ich die Tabellennamen auslesen kann und dann für jede Tabelle den Count erstellen kann...
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 9.972

beantworten | zitieren | melden

So geht das auch nicht.
Du kannst spalten selektieren, nicht Datenbanken.

Aber es gibt da eine undokumentierte SP beim SqlServer die kann Dir da helfen.
SP_MsForEachTable

Gier ein beispiel dazu
http://dbaspot.com/forums/sqlserver-server/356914-looping-tables.html
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von FZelle am .
private Nachricht | Beiträge des Benutzers
solick
myCSharp.de - Member



Dabei seit:
Beiträge: 56

Themenstarter:

beantworten | zitieren | melden

Danke für den Hinweis, aber unter 2008 funktioniert die SP wohl nicht... jedenfalls gibt er mir einen Syntax Fehler aus.

Bei Oracle gibt es im INFORMATION_SCHEMA doch deutlich mehr INfos, wenn ich mich recht erinnere, auch die Anzahl der Datensätze konnte man dort auslesen.

Gibt es denn in T_SQL keine einfache Möglichkeit, sich alle Tabellen einer DB und die Anzahl der Datensätze anzeigen zu lassen?

Mit einer Function oder Stored Procedure müsste es ja gehen, aber da müsst ich mich erst wieder reinfummeln, dachte das geht was einfacher :(
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 9.972

beantworten | zitieren | melden

Doch, sie funktioniert unter 2008, wie hast DU sie denn benutzt.
exec sp_msforeachtable 'select ''?'', count (*) from ?'
geht bei mir einwandfrei.


Und vergleiche mit xyz bringen immer nix, Du willst etwas für MSSQL haben und dann musst Du damit auskommen.
Ist genauso wenn ich sagen würde IDENTITY gibt es nicht unter Oracle.
Das man das mit Sequenzen macht ist klar, aber eben komplett was anderes.
private Nachricht | Beiträge des Benutzers
solick
myCSharp.de - Member



Dabei seit:
Beiträge: 56

Themenstarter:

beantworten | zitieren | melden

Super jetzt gehts. Keine Ahnung warum vorher nicht. Hatte es so geschrieben. DAnke!

Gibts es da irgendwo ne Syntax zu dem Befehl? Kann man die Spaltennamen benennen?

BEste Grüße

Solick
private Nachricht | Beiträge des Benutzers
Viper78
myCSharp.de - Member



Dabei seit:
Beiträge: 162
Herkunft: Dortmund

beantworten | zitieren | melden

Hi,

wenn man sich auf das Schema verläst, ist man verlassen.
Nur der
 Select Count(*) from Tabelle
gibt zuverlässig die Menge aus.
Beim MSSQL bin ich häufiger mit falschen Zahlen enttäuscht worden.
Mach es lieber selber zu Fuß.
Das Leben ist schön!
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 9.972

beantworten | zitieren | melden

sp_msforeachtable führt den angehängten dynamischen Sql aus, ersetzt nur das ? mit dem TableName.
Du kannst mit dem Sql alles machen was Du willst.
private Nachricht | Beiträge des Benutzers
Noodles
myCSharp.de - Experte



Dabei seit:
Beiträge: 4.644
Herkunft: Leipzig

beantworten | zitieren | melden

Vielleicht auch interessant: sp_spaceused

http://www.insidesql.org/faq/sp_spaceused-in-tabelle-unleiten
private Nachricht | Beiträge des Benutzers
frisch
myCSharp.de - Member

Avatar #avatar-1724.gif


Dabei seit:
Beiträge: 2.082
Herkunft: Coburg / Oberfranken

beantworten | zitieren | melden

Hallo,

hatte das neulich für eine meiner DBs gebraucht.

Hier das Script (SQL2005):
SELECT DISTINCT Tab.Name 
FROM sysindexes Ind
INNER JOIN sys.tables Tab
ON Ind.id = OBJECT_ID(Tab.Name)
--AND Ind.rows > 0
ORDER BY Tab.Name
Edit: "AND Ind.rows > 0" sorgt dafür, nur Tabellen mit Zeilen anzuzeigen.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von frisch am .
Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de
private Nachricht | Beiträge des Benutzers