1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Tabelle aus gegebener Tabelle erzeugen

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Jakob, 19 April 2011.

  1. Jakob

    Jakob Neuer Benutzer

    Hallo erst mal. Das ist mein erst Beitrag hier.

    Ich bin ein relativer Anfänger im DB-Design/Programmierung.

    Kann ich mithilfe einer Query (SQL-Syntax in Sql-Server 2005) mit Daten aus einer vorhandenen Tabelle (Felder: Tabellenname, Feldname und Datentyp) eine neue Tabelle erzeugen bzw. eine Tabelle um Felder erweitern?

    Gruß Jakob
     
  2. ukulele

    ukulele Datenbank-Guru

    Müsste gehen - Bin erst neulich im Bezug auf Log Trigger auf einen ähnlichen Vorgang gestoßen. Dort werden Spaltennamen etc. aus den Systabellen ausgelesen (z.B. syscolumns) zu finden unter http://devstack.net/wordpress/?p=223 . Dann müsste man noch testen, ob CREATE TABLE @variable VALUES(@v1,...) auch funktioniert.

    Der Aufwand ist aber eventuell höher, als die Tabellen grade per SQL Studio \ Script für Tabelle als... \ CREATE in ... \ neues Fenster mit abgeänderten Angaben manuell zu erstellen.
     
  3. Charly

    Charly Datenbank-Guru

    Hallo Jakob,

    ich mache sowas immer mit den INFORMATION_SCHEMA Sichten.
    Da ein EXEC ('SELECT * FROM syslogins') funktioniert sollte es mit einem zusammengesetzten String auch gehen.

    Um Strings aus Tabellenzeilen zusammen zu setzten benötigst Du eine Schleife.

    Hier wirds jetzt richtig lustig. Das ist nur ein kleines Beispiel wie man sowas macht.
    Ich habe nur die Spaltennamen aus der INFORMATION_SCHEMA.COLUMNS genommen.
    Die Inforamtionen für die Datentypen stehen aber auch drin.

    Code:
    USE MASTER
    GO
    
    DECLARE @SQLSTR AS NVARCHAR(4000)
    DECLARE @POS AS INTEGER
    
    SET @POS = 0
    SET @SQLSTR = 'CREATE TABLE #Syslogins2 ('
    
    SELECT @POS=MIN(ORDINAL_POSITION) FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = 'syslogins'
    
    WHILE @POS IS NOT NULL
    BEGIN
    
    SELECT @SQLSTR = @SQLSTR + COLUMN_NAME + ', ' FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'syslogins')
    ORDER BY ORDINAL_POSITION
    
    SELECT @POS=MIN(ORDINAL_POSITION) FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = 'syslogins' AND ORDINAL_POSITION>@POS
    
    END
    
    PRINT @SQLSTR
    Gruß Charly
     
    Walter gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen