Announcement

Collapse
No announcement yet.

Zeige alle Tabellen mit Varchar Spalten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zeige alle Tabellen mit Varchar Spalten

    Guten Morgen!

    Ich brauche eine Abfrage, welche mir alle Tabellen in einer Datenbank auflistet, die varchar Spalten enthält.

    Gibt es da eine Möglichkeit? Leider hat die DB 1400 Tabellen, also mal eben durchschauen wäre sehr aufwendig.

    Grüße
    Sascha

  • #2
    folgende Systemtabellen sollten Dir weiter helfen:

    Sys.ALL_Objects
    Sys.All_Columns
    Sys.Systypes

    Comment


    • #3
      Hallo ebis,

      vielen Dank für die Anregung.
      Ich habe da auch schon etwas zusammengebaut, was als Einzelkomponenten funktioniert, aber als Gesamtpaket leider nicht.

      Das Script sieht derzeit so aus:
      Code:
      SELECT [name] FROM Sys.ALL_Objects 
      WHERE TYPE = 'U' 
      AND [object_id] = 
      	(SELECT [object_id] 
      	 FROM Sys.All_Columns 
      	 WHERE system_type_id = 167 
      	 AND [object_id] >= 0 
      	 GROUP BY [object_id])
      ORDER BY [name]
      Dieser Teil bringt ein Ergebnis, nämlich die Tabellennamen:
      Code:
      SELECT [name] FROM Sys.ALL_Objects 
      WHERE TYPE = 'U'
      Und dieser Teil zeigt alle Objekte mit Varchar-Spalten, die ich dann gruppiere:
      Code:
      SELECT [object_id] 
      	 FROM Sys.All_Columns 
      	 WHERE system_type_id = 167 
      	 AND [object_id] >= 0 
      	 GROUP BY [object_id]
      Aber die Kombination der beiden Teile klappt nicht und führt zum Fehler:
      Code:
      Meldung 512, Ebene 16, Status 1, Zeile 1
      Die Unterabfrage hat mehr als einen Wert zurückgegeben. Das ist nicht zulässig, wenn die Unterabfrage auf =, !=, <, <=, > oder >= folgt oder als Ausdruck verwendet wird.
      Ich stehe auf dem Schlauch. Es ist vermutlich nur ein kleiner Denkfehler, aber ich komme nicht drauf.

      Grüße
      Sascha

      Comment


      • #4
        Hallo Sascha,

        bei ein Subselect mit mehreren Ergebnissen (> 1) nicht mit = sondern mit IN prüfen.

        [highlight=code]
        SELECT [name] FROM Sys.ALL_Objects
        WHERE TYPE = 'U'
        AND [object_id] IN
        (SELECT [object_id]
        FROM Sys.All_Columns
        WHERE system_type_id = 167
        AND [object_id] >= 0
        GROUP BY [object_id])
        ORDER BY [name] [/highlight]
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          Hallo Olaf,

          vielen Dank!
          Jetzt funktioniert es.

          Grüße
          Sascha

          Comment

          Working...
          X