Announcement

Collapse
No announcement yet.

Aus einer Tabelle mehrere neu Tabellen automatisch Erstellen.

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

  • Aus einer Tabelle mehrere neu Tabellen automatisch Erstellen.

    Habe in meiner Datenbank folgende Tabelle ( hier nur eine Ausschnitt gesamt über 50.000 Datensätze )

    Die Tabelle enhält Beschreibungen anderer Tabellen:

    Ich brauche ein Spript was aus dieser Tabelle alle beschriebenen Tabellen erstellt (Create ..).

    also z.b. für die Tabelle XK1:

    CREATE TABLE [dbo].[XK1](
    [DATUM] [DATE](4) ....
    [BAHNHOF] [nvarchar](30)....
    [BRANCHE] [nvarchar](4 ) ....
    [FALLDAT] [DATE](4)...

    ....
    ..
    ) ON [PRIMARY]

    So das ich hinterher ca. 11000 eigene Tabellen habe

    Die Macht ist mit EUCH


    Tabellenname Feldname KEYSEQ COLTYPE LENGTH Bemerkung Nulls
    XK1 DATUM 99 DATE 4 datum Y
    XK1 BAHNHOF 99 CHAR 30 bahnhof N
    XK1 BRANCHE 99 CHAR 4 Branche Y
    XK1 FALLDAT 99 DATE 4 FALLDAT Y
    XK1 DATUM2 99 DATE 4 sdatum N
    XK1 FIRMENNAME 99 CHAR 30 Firmenname N
    XK1 FIRMENNAME_2 99 CHAR 30 Firmenname-Erw. N
    XK1 HAUSNUMMER 99 CHAR 16 Hausnummer N
    XK2 SCHLUESSEL 99 CHAR 2 SCHLUESSEL Y
    XK2 NAME 99 CHAR 40 NAME N
    XK2 LANDSCHLUESSEL 99 CHAR 3 LANDSCHLUESSEL Y
    XK2 LEISTUNG 99 CHAR 2 LEISTUNG N
    XK2 INDEX 2 CHAR 2 INDEX N
    XK3 NUMMER 1 CHAR 8 NUMMER N
    XK3 LOESCH 99 CHAR 1 LOESCH N
    XK4 ORTSBEZEICHNUNG 99 CHAR 40 Ortsbezeichnung N
    XK5 ORTSTEIL 99 CHAR 40 Ortsteil N
    XK5 POSTFACH 99 CHAR 9 Postfach N
    XK6 POSTFACH_PLZ 99 CHAR 8 Postfach_PLZ N
    XK6 POSTFACHORTS_BEZ 99 CHAR 40 Postfachorts_Bez N
    XK7 POSTLEITZAHL 99 CHAR 8 Postleitzahl N
    XK7 SPERRDATUM 99 DATE 4 Sperrdatum Y
    XK7 SPERRGRUND 99 CHAR 50 Sperrgrund N
    XK7 SPERRGRUND_ERW 99 CHAR 30 Sperrgrund N
    XK7 SPERRKENNZ 99 CHAR 1 Sperrkennzeichen N
    XK7 STRASSENNAME 99 CHAR 30 Strassenname N
    XK8 STRASSENNAME_ERW 99 CHAR 30 Strassenname_Erw N
    XK8 SUCHBEGRIFF 99 CHAR 30 Suchbegriff N
    XK9 SUCHBEGRIFF 99 CHAR 30 Suchbegriff-Erw N
    XK9 TEILEW 99 CHAR 3 TeileW N
    XK9 UMSATZSTEUER 99 CHAR 15 Umsatzsteue N
    XK9 UNGUET 99 DATE 4 Ungueltigkeitsdatum Y
    XK9 FIRMENNAME 99 CHAR 30 Firmenname N
    .................................................. ....
    ....................................
    ........................
    ............

  • #2
    Hallo Stefan17,

    Ich brauche ein Spript
    Dann schreibe doch eines. Wo ist das Problem?

    Ab Sql Server 2008 gibt es den Datentypen DATE, es gibt aber keinen DATE(4).
    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


    • #3
      Was Crossposts betrifft, da hälst Du Dich auch nicht gerade bescheiden zurück:
      http://www.pg-forum.de/sql/3733-aus-...erstellen.html

      http://www.selfphp.de/forum/showthre...859#post129859

      http://www.ms-office-forum.net/forum....php?p=1240955

      http://social.msdn.microsoft.com/For...f-8d54998646fa

      In der Zeit, für die Posts hättest Du das Script selbst schreiben können.

      Kein Lösungsansatz vorhanden? Dann lösen wir mal (trotz alle dem) auf:
      [highlight=SQL]SET NOCOUNT ON;
      CREATE TABLE #Tab
      (Tabellenname varchar(50),
      Feldname varchar(50),
      KEYSEQ int,
      COLTYPE varchar(50),
      [LENGTH] int,
      Bemerkung varchar(50),
      Nulls char(10));
      INSERT INTO #Tab VALUES('XK1', 'DATUM', 99, 'DATE', 4, 'datum', 'Y');
      INSERT INTO #Tab VALUES('XK1', 'BAHNHOF', 99, 'CHAR', 30, 'bahnhof' , 'N');
      INSERT INTO #Tab VALUES('XK1', 'BRANCHE', 99, 'CHAR', 4, 'Branche', 'Y');
      INSERT INTO #Tab VALUES('XK1', 'FALLDAT', 99, 'DATE', 4, 'FALLDAT', 'Y');
      INSERT INTO #Tab VALUES('XK1', 'DATUM2', 99, 'DATE', 4, 'sdatum' , 'N');
      INSERT INTO #Tab VALUES('XK1', 'FIRMENNAME', 99, 'CHAR', 30, 'Firmenname', 'N');
      INSERT INTO #Tab VALUES('XK1', 'FIRMENNAME_2', 99, 'CHAR', 30, ' Firmenname-Erw.' , 'N');
      INSERT INTO #Tab VALUES('XK1', 'HAUSNUMMER', 99, 'CHAR', 16, 'Hausnummer', 'N');
      INSERT INTO #Tab VALUES('XK2', 'SCHLUESSEL', 99, 'CHAR', 2, ' SCHLUESSEL', 'Y');
      INSERT INTO #Tab VALUES('XK2', 'NAME', 99, 'CHAR', 40, 'NAME', 'N');
      INSERT INTO #Tab VALUES('XK2', 'LANDSCHLUESSEL', 99, 'CHAR', 3, ' LANDSCHLUESSEL', 'Y');
      INSERT INTO #Tab VALUES('XK2', 'LEISTUNG', 99, 'CHAR', 2, 'LEISTUNG', 'N');
      INSERT INTO #Tab VALUES('XK2', 'INDEX', 2, 'CHAR', 2, 'INDEX', 'N');
      GO

      SELECT CreateStart +
      SUBSTRING(FieldList, 1, LEN(FieldList) - 1) +
      CreateEnd AS CreateStatement
      FROM (
      SELECT 'CREATE TABLE ' + Tabellenname + CHAR(13) + '(' AS CreateStart,
      (SELECT '[' + FELDNAME + '] ' + COLTYPE +
      CASE WHEN T.COLTYPE IN ('CHAR', 'NCHAR', 'VARCHAR', 'NVARCHAR')
      THEN '(' + CONVERT(varchar(20), T.[LENGTH]) + ')'
      ELSE '' END + ', '
      FROM #Tab AS T
      WHERE T.Tabellenname = #Tab.Tabellenname
      FOR XML PATH('')) AS FieldList,
      ')' AS CreateEnd
      FROM #Tab
      GROUP BY Tabellenname) AS SUB;

      GO
      DROP TABLE #Tab[/highlight]
      [highlight=Text]CreateStatement
      ----------------------------------------------------------------------------------------------------------------------------------------------------------
      CREATE TABLE XK1
      ([DATUM] DATE, [BAHNHOF] CHAR(30), [BRANCHE] CHAR(4), [FALLDAT] DATE, [DATUM2] DATE, [FIRMENNAME] CHAR(30), [FIRMENNAME_2] CHAR(30), [HAUSNUMMER] CHAR(16))
      CREATE TABLE XK2
      ([SCHLUESSEL] CHAR(2), [NAME] CHAR(40), [LANDSCHLUESSEL] CHAR(3), [LEISTUNG] CHAR(2), [INDEX] CHAR(2))
      [/highlight]

      An den Feinheiten kannst Du dann ja noch feilen.
      P.S.: Es nicht so die beste Idee, reservierte Begriff wie "INDEX" für ein Feldnamen zu verwenden.
      Zuletzt editiert von O. Helper; 09.08.2009, 14:38.
      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


      • #4
        Danke O.Helper grosser Meister für die schnelle Antwort !

        aber wenn ich das richtig verstehe kann ich hier eine XML-Datei der Ursprungstabelle einfügen die dann eingelsen und abgearbeitet wird :

        FROM #Tab AS T
        WHERE T.Tabellenname = #Tab.Tabellenname
        FOR XML PATH('')) AS FieldList,
        ')' AS CreateEnd


        wie sollte die den aufgebaut ( Struktur ) sein ?

        Comment


        • #5
          FOR XML PATH ... ist nur T-SQL Konstrukt, um im Sub-Select die Felder als Koma-separierte Ausflistung zurück zu erhalten.
          Ich habe keine XML Datei eingefügt, also brauchst Du es auch nicht.

          Wenn Du Dir das Statement mal ansiehst, ist die Quell-Tabelle wie bei Dir aufgebaut.
          Kannst Du also unverändert übernehmen ... ohne Arbeit investiert zu haben.
          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


          • #6
            VIELE DANK !
            das ist der unterschied zwischen uns !

            alles Gute und vielen Dank O.Helper

            Comment

            Working...
            X