Wie macht man ein Recordset auf eine Systemtabelle?
-
Hallo!
Ich möchte über ein select alle Tabellennamen in meiner Datenbank (MSDE) haben. Den Befehl habe ich auch hinbekommen (denke ich mal) und in einen View gepackt.
Im Enterprisemanager funktioniert das top.Nun möchte ich über CRecordset zugreifen und da wird der View nicht angezeigt.
Naja, sowas schreckt mich ja nur kurzfristig und ich habe das Set erstmal für eine andere Tabelle gemacht und dann an die View angepasst. Aber ich bekomme diese Meldung:Invalid object name 'dbo.Alle_Tabellen'.
Statement(s) could not be prepared.Der View heißt aber wirklich so.
Ich bin als sa angemeldet, ein Rechteproblem dürfte es also nicht sein.Wo ist der Haken? Wie komme ich an die gewünschte Info?
-
Der Befehl sieht doch eigentlich so aus:
SELECT * FROM INFORMATION_SCHEMA.TABLES
oder?
-
Also, ich habe:
CREATE VIEW dbo.Alle_Tabellen AS SELECT TOP 100 PERCENT name AS Tabelle FROM dbo.sysobjects WHERE (xtype = 'U') AND (name <> 'dtproperties') ORDER BY name
Aber ich hab den Fehler - ich hatte auf dem falschen Server gearbeitet und die View noch nicht übertragen.
Ist der Befehl so in Ordnung oder sollte ich lieber deinen Vorschlag nehmen?
Da bekomme ich auch die Systemtabellen, die ich gar nicht haben will.
-
Es ist eigentlich egal, was Du nimmst... das via INFORMATION_SCHEMA ist schon fast ein wenig standardisiert (gibt es auch bei anderen RDBMS). Es liefert halt alle für den Benutzer zugänglichen Tabellen...
Aber die "sysobjects" Tabelle ist ja auch dokumentiert... hoffentlich wird sie sich nicht in Zukunft ändern
-
Naja, da der 2005er SQL-Server (Express) angeblich (laut Projektleiter eines Parnterprojektes) nicht mehr unter Win98 läuft, erwartet mich da so schnell kein Update.
Aber ich mach mir mal einen Merker für das INFORMATION_SCHEMA, davon hatte ich noch nichts gesehen - es kam auch auf dem Adminkurs nicht vor.
Ich glaube das ist lesenswert.Danke