Tabelle aus gegebener Tabelle erzeugen

Jakob

Neuer Benutzer
Beiträge
1
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
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.394
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.
 
Werbung:

Charly

Datenbank-Guru
Beiträge
306
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
 
Oben