-- Wechsel zur Datenbank 'engomo' USE engomo; -- Deklariere alle benötigten Variablen und Tabellen zu Beginn -- Deklariere eine Variable für das Tabellenpräfix DECLARE @TablePrefix NVARCHAR(128) = 'begehung_'; -- Deklariere eine Tabellenvariable mit den Endungen der Tabellennamen DECLARE @TableSuffixes TABLE ( Suffix NVARCHAR(128) ); -- Deklariere eine Tabellenvariable mit den Spalteninformationen DECLARE @ColumnsToAdd TABLE ( TableName NVARCHAR(128), ColumnName NVARCHAR(128) ); -- Deklariere Variablen für die Spalten-Schleife DECLARE @TargetTable NVARCHAR(128); DECLARE @CurrentColumn NVARCHAR(128); DECLARE @AddColumnSQL NVARCHAR(MAX); -- Füge die gewünschten Tabellennamen-Endungen hinzu INSERT INTO @TableSuffixes (Suffix) VALUES ('extras'), ('raeume'), ('badewanne'), ('toilette'), ('dusche'), ('waschbecken'), ('allgemein'), ('usersettings'); -- Füge die gewünschten Spalten hinzu, einschließlich begehung_stammdaten ohne engomoid INSERT INTO @ColumnsToAdd (TableName, ColumnName) VALUES -- begehung_extras (@TablePrefix + 'extras', 'engomoid'), (@TablePrefix + 'extras', 'raum_bezeichnung'), (@TablePrefix + 'extras', 'handtuchheizkoerper'), (@TablePrefix + 'extras', 'badetuchhalter'), (@TablePrefix + 'extras', 'waschmaschinenanschluss'), (@TablePrefix + 'extras', 'notizen'), -- begehung_raeume (@TablePrefix + 'raeume', 'engomoid'), (@TablePrefix + 'raeume', 'raumid'), (@TablePrefix + 'raeume', 'raum_bezeichnung'), (@TablePrefix + 'raeume', 'tapezieren'), (@TablePrefix + 'raeume', 'anstrich_tuerblatt'), (@TablePrefix + 'raeume', 'anstrich_tuerrahmen'), (@TablePrefix + 'raeume', 'anstrich_tuerblatt_notizen'), (@TablePrefix + 'raeume', 'anstrich_heizkoerper'), (@TablePrefix + 'raeume', 'anstrich_heizkoerper_notizen'), (@TablePrefix + 'raeume', 'anstrich_decke'), (@TablePrefix + 'raeume', 'anstrich_decke_notizen'), (@TablePrefix + 'raeume', 'anstrich_waende'), (@TablePrefix + 'raeume', 'anstrich_waende_notizen'), (@TablePrefix + 'raeume', 'anstrich_fenster'), (@TablePrefix + 'raeume', 'anstrich_fenster_notizen'), (@TablePrefix + 'raeume', 'anstrich_fenstersims'), (@TablePrefix + 'raeume', 'anstrich_fenstersims_notizen'), (@TablePrefix + 'raeume', 'material_fenster'), (@TablePrefix + 'raeume', 'material_fenstersims'), (@TablePrefix + 'raeume', 'material_bodenbelag'), (@TablePrefix + 'raeume', 'sonstiges_einbauschrank'), (@TablePrefix + 'raeume', 'sonstiges_einbauschrank_notizen'), (@TablePrefix + 'raeume', 'sonstiges_luefter'), (@TablePrefix + 'raeume', 'sonstiges_luefter_notizen'), (@TablePrefix + 'raeume', 'notizen_verursachung_mieter'), (@TablePrefix + 'raeume', 'notizen_instandsetzung_mieter'), (@TablePrefix + 'raeume', 'notizen_instandsetzung_vermieter'), -- begehung_badewanne (@TablePrefix + 'badewanne', 'engomoid'), (@TablePrefix + 'badewanne', 'raum_bezeichnung'), (@TablePrefix + 'badewanne', 'ablauf_mit_stoepsel'), (@TablePrefix + 'badewanne', 'excenter_garnitur'), (@TablePrefix + 'badewanne', 'griff'), (@TablePrefix + 'badewanne', 'handbrause_mit_schlauch'), -- begehung_dusche (@TablePrefix + 'dusche', 'engomoid'), (@TablePrefix + 'dusche', 'raum_bezeichnung'), (@TablePrefix + 'dusche', 'ablagekorb'), (@TablePrefix + 'dusche', 'duschabtrennung'), (@TablePrefix + 'dusche', 'duschkabine'), (@TablePrefix + 'dusche', 'duschstange'), (@TablePrefix + 'dusche', 'duschstange_mit_seifenschale'), (@TablePrefix + 'dusche', 'dusche_bodengleich'), (@TablePrefix + 'dusche', 'duschtasse'), (@TablePrefix + 'dusche', 'handbrause_mit_schlauch'), -- begehung_waschbecken (@TablePrefix + 'waschbecken', 'engomoid'), (@TablePrefix + 'waschbecken', 'raum_bezeichnung'), (@TablePrefix + 'waschbecken', 'ablauf_mit_stoepsel'), (@TablePrefix + 'waschbecken', 'doppelhandtuchhalter'), (@TablePrefix + 'waschbecken', 'doppelwaschbecken'), (@TablePrefix + 'waschbecken', 'doppelwaschtisch'), (@TablePrefix + 'waschbecken', 'excenter_garnitur'), (@TablePrefix + 'waschbecken', 'handtuchhalter'), (@TablePrefix + 'waschbecken', 'handtuchhaken'), (@TablePrefix + 'waschbecken', 'konsole'), (@TablePrefix + 'waschbecken', 'seifenschale'), (@TablePrefix + 'waschbecken', 'spiegelleuchte'), (@TablePrefix + 'waschbecken', 'waschbecken'), -- begehung_toilette (@TablePrefix + 'toilette', 'engomoid'), (@TablePrefix + 'toilette', 'raum_bezeichnung'), (@TablePrefix + 'toilette', 'sitz_mit_deckel'), (@TablePrefix + 'toilette', 'sitz_mit_deckel_softclose'), (@TablePrefix + 'toilette', 'toilettenpapierhalter'), -- begehung_usersettings (@TablePrefix + 'usersettings', 'user_mail'), (@TablePrefix + 'usersettings', 'user_theme'); -- Verwende eine set-basierte Methode, um durch die Spalten zu iterieren DECLARE column_cursor CURSOR FOR SELECT TableName, ColumnName FROM @ColumnsToAdd; OPEN column_cursor; BEGIN TRY FETCH NEXT FROM column_cursor INTO @TargetTable, @CurrentColumn; WHILE @@FETCH_STATUS = 0 BEGIN BEGIN TRY -- Überprüfe, ob die Tabelle existiert, andernfalls erstelle die Tabelle IF NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @TargetTable AND TABLE_SCHEMA = 'dbo' ) BEGIN -- Erstelle die Tabelle, wenn sie nicht existiert DECLARE @CreateTableSQL NVARCHAR(MAX); SET @CreateTableSQL = N'CREATE TABLE dbo.[' + @TargetTable + N'] (' + @CurrentColumn + N' NVARCHAR(255));'; EXEC sp_executesql @CreateTableSQL; PRINT 'Tabelle ' + @TargetTable + ' wurde erstellt.'; END -- Überprüfe, ob die Spalte bereits existiert IF NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @TargetTable AND COLUMN_NAME = @CurrentColumn AND TABLE_SCHEMA = 'dbo' ) BEGIN -- Definiere das ALTER TABLE Statement zum Hinzufügen der Spalte mit NVARCHAR(255) Typ SET @AddColumnSQL = N'ALTER TABLE dbo.[' + @TargetTable + N'] ADD [' + @CurrentColumn + N'] NVARCHAR(255);'; -- Führe das dynamische SQL aus EXEC sp_executesql @AddColumnSQL; PRINT 'Spalte ' + @CurrentColumn + ' wurde zu ' + @TargetTable + ' hinzugefügt.'; END ELSE BEGIN PRINT 'Spalte ' + @CurrentColumn + ' existiert bereits in ' + @TargetTable + '.'; END END TRY BEGIN CATCH PRINT 'Fehler beim Hinzufügen der Spalte ' + @CurrentColumn + ' zu ' + @TargetTable + ': ' + ERROR_MESSAGE(); END CATCH -- Hole die nächste Spalte FETCH NEXT FROM column_cursor INTO @TargetTable, @CurrentColumn; END END TRY BEGIN CATCH PRINT 'Fehler während der Cursor-Iteration: ' + ERROR_MESSAGE(); END CATCH -- Schließe und deallokiere den Spalten-Cursor CLOSE column_cursor; DEALLOCATE column_cursor;