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
Wo hängt es denn?
Du kannst die TabellenNamen auslesen und du weisst wie man ein Count erstellt.
Welchen Teil bekommst du nicht hin?
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...
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
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 😦
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.
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
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!
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.
Vielleicht auch interessant: sp_spaceused
http://www.insidesql.org/faq/sp_spaceused-in-tabelle-unleiten
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.
Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de