diff --git a/sql-struktur.sql b/sql-struktur.sql index b6e8901..fb97aa3 100644 --- a/sql-struktur.sql +++ b/sql-struktur.sql @@ -1,6 +1,9 @@ -- Wechsel zur Datenbank 'engomo' USE engomo; +-- 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) @@ -19,108 +22,108 @@ INSERT INTO @TableSuffixes (Suffix) VALUES -- Deklariere eine Tabellenvariable mit den Spalteninformationen DECLARE @ColumnsToAdd TABLE ( - Suffix NVARCHAR(128), + TableName NVARCHAR(128), ColumnName NVARCHAR(128), ColumnType NVARCHAR(128) ); -- Füge die gewünschten Spalten hinzu, einschließlich begehung_stammdaten ohne engomoid -INSERT INTO @ColumnsToAdd (Suffix, ColumnName, ColumnType) VALUES +INSERT INTO @ColumnsToAdd (TableName, ColumnName, ColumnType) VALUES -- begehung_extras - ('extras', 'engomoid', 'BIGINT NOT NULL'), - ('extras', 'raum_bezeichnung', 'VARCHAR(255)'), - ('extras', 'handtuchheizkoerper', 'BIT'), - ('extras', 'badetuchhalter', 'BIT'), - ('extras', 'waschmaschinenanschluss', 'BIT'), - ('extras', 'notizen', 'TEXT'), + (@TablePrefix + 'extras', 'engomoid', 'BIGINT NOT NULL'), + (@TablePrefix + 'extras', 'raum_bezeichnung', 'VARCHAR(255)'), + (@TablePrefix + 'extras', 'handtuchheizkoerper', 'BIT'), + (@TablePrefix + 'extras', 'badetuchhalter', 'BIT'), + (@TablePrefix + 'extras', 'waschmaschinenanschluss', 'BIT'), + (@TablePrefix + 'extras', 'notizen', 'TEXT'), -- begehung_raeume - ('raeume', 'engomoid', 'BIGINT NOT NULL'), - ('raeume', 'raumid', 'VARCHAR(255)'), - ('raeume', 'raum_bezeichnung', 'VARCHAR(255)'), - ('raeume', 'tapezieren', 'BIT'), - ('raeume', 'anstrich_tuerblatt', 'BIT'), - ('raeume', 'anstrich_tuerrahmen', 'BIT'), - ('raeume', 'anstrich_tuerblatt_notizen', 'TEXT'), - ('raeume', 'anstrich_heizkoerper', 'BIT'), - ('raeume', 'anstrich_heizkoerper_notizen', 'TEXT'), - ('raeume', 'anstrich_decke', 'BIT'), - ('raeume', 'anstrich_decke_notizen', 'TEXT'), - ('raeume', 'anstrich_waende', 'BIT'), - ('raeume', 'anstrich_waende_notizen', 'TEXT'), - ('raeume', 'anstrich_fenster', 'BIT'), - ('raeume', 'anstrich_fenster_notizen', 'TEXT'), - ('raeume', 'anstrich_fenstersims', 'BIT'), - ('raeume', 'anstrich_fenstersims_notizen', 'TEXT'), - ('raeume', 'material_fenster', 'VARCHAR(255)'), - ('raeume', 'material_fenstersims', 'VARCHAR(255)'), - ('raeume', 'material_bodenbelag', 'VARCHAR(255)'), - ('raeume', 'sonstiges_einbauschrank', 'BIT'), - ('raeume', 'sonstiges_einbauschrank_notizen', 'TEXT'), - ('raeume', 'sonstiges_luefter', 'BIT'), - ('raeume', 'sonstiges_luefter_notizen', 'TEXT'), - ('raeume', 'notizen_verursachung_mieter', 'TEXT'), - ('raeume', 'notizen_instandsetzung_mieter', 'TEXT'), - ('raeume', 'notizen_instandsetzung_vermieter', 'TEXT'), + (@TablePrefix + 'raeume', 'engomoid', 'BIGINT NOT NULL'), + (@TablePrefix + 'raeume', 'raumid', 'VARCHAR(255)'), + (@TablePrefix + 'raeume', 'raum_bezeichnung', 'VARCHAR(255)'), + (@TablePrefix + 'raeume', 'tapezieren', 'BIT'), + (@TablePrefix + 'raeume', 'anstrich_tuerblatt', 'BIT'), + (@TablePrefix + 'raeume', 'anstrich_tuerrahmen', 'BIT'), + (@TablePrefix + 'raeume', 'anstrich_tuerblatt_notizen', 'TEXT'), + (@TablePrefix + 'raeume', 'anstrich_heizkoerper', 'BIT'), + (@TablePrefix + 'raeume', 'anstrich_heizkoerper_notizen', 'TEXT'), + (@TablePrefix + 'raeume', 'anstrich_decke', 'BIT'), + (@TablePrefix + 'raeume', 'anstrich_decke_notizen', 'TEXT'), + (@TablePrefix + 'raeume', 'anstrich_waende', 'BIT'), + (@TablePrefix + 'raeume', 'anstrich_waende_notizen', 'TEXT'), + (@TablePrefix + 'raeume', 'anstrich_fenster', 'BIT'), + (@TablePrefix + 'raeume', 'anstrich_fenster_notizen', 'TEXT'), + (@TablePrefix + 'raeume', 'anstrich_fenstersims', 'BIT'), + (@TablePrefix + 'raeume', 'anstrich_fenstersims_notizen', 'TEXT'), + (@TablePrefix + 'raeume', 'material_fenster', 'VARCHAR(255)'), + (@TablePrefix + 'raeume', 'material_fenstersims', 'VARCHAR(255)'), + (@TablePrefix + 'raeume', 'material_bodenbelag', 'VARCHAR(255)'), + (@TablePrefix + 'raeume', 'sonstiges_einbauschrank', 'BIT'), + (@TablePrefix + 'raeume', 'sonstiges_einbauschrank_notizen', 'TEXT'), + (@TablePrefix + 'raeume', 'sonstiges_luefter', 'BIT'), + (@TablePrefix + 'raeume', 'sonstiges_luefter_notizen', 'TEXT'), + (@TablePrefix + 'raeume', 'notizen_verursachung_mieter', 'TEXT'), + (@TablePrefix + 'raeume', 'notizen_instandsetzung_mieter', 'TEXT'), + (@TablePrefix + 'raeume', 'notizen_instandsetzung_vermieter', 'TEXT'), -- begehung_badewanne - ('badewanne', 'engomoid', 'BIGINT NOT NULL'), - ('badewanne', 'raum_bezeichnung', 'VARCHAR(255)'), - ('badewanne', 'ablauf_mit_stoepsel', 'BIT'), - ('badewanne', 'excenter_garnitur', 'BIT'), - ('badewanne', 'griff', 'BIT'), - ('badewanne', 'handbrause_mit_schlauch', 'BIT'), + (@TablePrefix + 'badewanne', 'engomoid', 'BIGINT NOT NULL'), + (@TablePrefix + 'badewanne', 'raum_bezeichnung', 'VARCHAR(255)'), + (@TablePrefix + 'badewanne', 'ablauf_mit_stoepsel', 'BIT'), + (@TablePrefix + 'badewanne', 'excenter_garnitur', 'BIT'), + (@TablePrefix + 'badewanne', 'griff', 'BIT'), + (@TablePrefix + 'badewanne', 'handbrause_mit_schlauch', 'BIT'), -- begehung_dusche - ('dusche', 'engomoid', 'BIGINT NOT NULL'), - ('dusche', 'raum_bezeichnung', 'VARCHAR(255)'), - ('dusche', 'ablagekorb', 'BIT'), - ('dusche', 'duschabtrennung', 'BIT'), - ('dusche', 'duschkabine', 'BIT'), - ('dusche', 'duschstange', 'BIT'), - ('dusche', 'duschstange_mit_seifenschale', 'BIT'), - ('dusche', 'dusche_bodengleich', 'BIT'), - ('dusche', 'duschtasse', 'BIT'), - ('dusche', 'handbrause_mit_schlauch', 'BIT'), + (@TablePrefix + 'dusche', 'engomoid', 'BIGINT NOT NULL'), + (@TablePrefix + 'dusche', 'raum_bezeichnung', 'VARCHAR(255)'), + (@TablePrefix + 'dusche', 'ablagekorb', 'BIT'), + (@TablePrefix + 'dusche', 'duschabtrennung', 'BIT'), + (@TablePrefix + 'dusche', 'duschkabine', 'BIT'), + (@TablePrefix + 'dusche', 'duschstange', 'BIT'), + (@TablePrefix + 'dusche', 'duschstange_mit_seifenschale', 'BIT'), + (@TablePrefix + 'dusche', 'dusche_bodengleich', 'BIT'), + (@TablePrefix + 'dusche', 'duschtasse', 'BIT'), + (@TablePrefix + 'dusche', 'handbrause_mit_schlauch', 'BIT'), -- begehung_waschbecken - ('waschbecken', 'engomoid', 'BIGINT NOT NULL'), - ('waschbecken', 'raum_bezeichnung', 'VARCHAR(255)'), - ('waschbecken', 'ablauf_mit_stoepsel', 'BIT'), - ('waschbecken', 'doppelhandtuchhalter', 'BIT'), - ('waschbecken', 'doppelwaschbecken', 'BIT'), - ('waschbecken', 'doppelwaschtisch', 'BIT'), - ('waschbecken', 'excenter_garnitur', 'BIT'), - ('waschbecken', 'handtuchhalter', 'BIT'), - ('waschbecken', 'handtuchhaken', 'BIT'), - ('waschbecken', 'konsole', 'BIT'), - ('waschbecken', 'seifenschale', 'BIT'), - ('waschbecken', 'spiegelleuchte', 'BIT'), - ('waschbecken', 'waschbecken', 'BIT'), + (@TablePrefix + 'waschbecken', 'engomoid', 'BIGINT NOT NULL'), + (@TablePrefix + 'waschbecken', 'raum_bezeichnung', 'VARCHAR(255)'), + (@TablePrefix + 'waschbecken', 'ablauf_mit_stoepsel', 'BIT'), + (@TablePrefix + 'waschbecken', 'doppelhandtuchhalter', 'BIT'), + (@TablePrefix + 'waschbecken', 'doppelwaschbecken', 'BIT'), + (@TablePrefix + 'waschbecken', 'doppelwaschtisch', 'BIT'), + (@TablePrefix + 'waschbecken', 'excenter_garnitur', 'BIT'), + (@TablePrefix + 'waschbecken', 'handtuchhalter', 'BIT'), + (@TablePrefix + 'waschbecken', 'handtuchhaken', 'BIT'), + (@TablePrefix + 'waschbecken', 'konsole', 'BIT'), + (@TablePrefix + 'waschbecken', 'seifenschale', 'BIT'), + (@TablePrefix + 'waschbecken', 'spiegelleuchte', 'BIT'), + (@TablePrefix + 'waschbecken', 'waschbecken', 'BIT'), -- begehung_toilette - ('toilette', 'engomoid', 'BIGINT NOT NULL'), - ('toilette', 'raum_bezeichnung', 'VARCHAR(255)'), - ('toilette', 'sitz_mit_deckel', 'BIT'), - ('toilette', 'sitz_mit_deckel_softclose', 'BIT'), - ('toilette', 'toilettenpapierhalter', 'BIT'), + (@TablePrefix + 'toilette', 'engomoid', 'BIGINT NOT NULL'), + (@TablePrefix + 'toilette', 'raum_bezeichnung', 'VARCHAR(255)'), + (@TablePrefix + 'toilette', 'sitz_mit_deckel', 'BIT'), + (@TablePrefix + 'toilette', 'sitz_mit_deckel_softclose', 'BIT'), + (@TablePrefix + 'toilette', 'toilettenpapierhalter', 'BIT'), -- begehung_stammdaten - ('stammdaten', 'Vertrag', 'NVARCHAR(255)'), - ('stammdaten', 'Wirtschaftseinheit', 'NVARCHAR(255)'), - ('stammdaten', 'Mietobjekt', 'NVARCHAR(255)'), - ('stammdaten', 'Strasse_und_Hausnummer', 'NVARCHAR(255)'), - ('stammdaten', 'Postleitzahl', 'NVARCHAR(20)'), - ('stammdaten', 'Ort', 'NVARCHAR(255)'), - ('stammdaten', 'LeerstBeleg_ab', 'DATE'), - ('stammdaten', 'Geschoss_Kurzbez', 'NVARCHAR(50)'), - ('stammdaten', 'Lage_im_Geschoss', 'NVARCHAR(255)'), - ('stammdaten', 'Anzahl_Raeume', 'INT'), - ('stammdaten', 'Anzahl_halbe_Raeume', 'INT'), - ('stammdaten', 'Hauptnutzflaeche', 'DECIMAL(18,2)'), - ('stammdaten', 'Geschaeftspartner', 'NVARCHAR(255)'), - ('stammdaten', 'Mietername', 'NVARCHAR(255)'), - ('stammdaten', 'Name_weiterer_Mieter', 'NVARCHAR(255)'); + (@TablePrefix + 'stammdaten', 'Vertrag', 'NVARCHAR(255)'), + (@TablePrefix + 'stammdaten', 'Wirtschaftseinheit', 'NVARCHAR(255)'), + (@TablePrefix + 'stammdaten', 'Mietobjekt', 'NVARCHAR(255)'), + (@TablePrefix + 'stammdaten', 'Strasse_und_Hausnummer', 'NVARCHAR(255)'), + (@TablePrefix + 'stammdaten', 'Postleitzahl', 'NVARCHAR(20)'), + (@TablePrefix + 'stammdaten', 'Ort', 'NVARCHAR(255)'), + (@TablePrefix + 'stammdaten', 'LeerstBeleg_ab', 'DATE'), + (@TablePrefix + 'stammdaten', 'Geschoss_Kurzbez', 'NVARCHAR(50)'), + (@TablePrefix + 'stammdaten', 'Lage_im_Geschoss', 'NVARCHAR(255)'), + (@TablePrefix + 'stammdaten', 'Anzahl_Raeume', 'INT'), + (@TablePrefix + 'stammdaten', 'Anzahl_halbe_Raeume', 'INT'), + (@TablePrefix + 'stammdaten', 'Hauptnutzflaeche', 'DECIMAL(18,2)'), + (@TablePrefix + 'stammdaten', 'Geschaeftspartner', 'NVARCHAR(255)'), + (@TablePrefix + 'stammdaten', 'Mietername', 'NVARCHAR(255)'), + (@TablePrefix + 'stammdaten', 'Name_weiterer_Mieter', 'NVARCHAR(255)'); -- Deklariere Variablen für die Tabellen-Schleife DECLARE @CurrentSuffix NVARCHAR(128); @@ -140,7 +143,7 @@ WHILE @@FETCH_STATUS = 0 BEGIN BEGIN TRY -- Erstelle den vollständigen Tabellennamen mit dem Präfix - SET @FullTableName = 'begehung_' + @CurrentSuffix; + SET @FullTableName = @TablePrefix + @CurrentSuffix; -- Überprüfe, ob die Tabelle bereits existiert in der Datenbank 'engomo' IF NOT EXISTS ( @@ -156,7 +159,7 @@ BEGIN SET @CreateTableColumns = ( SELECT STRING_AGG('[' + ColumnName + '] ' + ColumnType, ', ') FROM @ColumnsToAdd - WHERE Suffix = @CurrentSuffix + WHERE TableName = @FullTableName ); IF @CreateTableColumns IS NULL OR LEN(@CreateTableColumns) = 0 @@ -196,19 +199,13 @@ DECLARE @PKName NVARCHAR(128); DECLARE @AddPKSQL NVARCHAR(MAX); DECLARE pk_cursor CURSOR FOR - SELECT DISTINCT Suffix + '_engomoid' - FROM @ColumnsToAdd + SELECT DISTINCT TableName + FROM @ColumnsToAdd WHERE ColumnName = 'engomoid'; --- Alternative: Direkt die Tabellen, die 'engomoid' haben -DECLARE pk_cursor_correct CURSOR FOR - SELECT DISTINCT 'begehung_' + Suffix - FROM @ColumnsToAdd - WHERE ColumnName = 'engomoid'; +OPEN pk_cursor; -OPEN pk_cursor_correct; - -FETCH NEXT FROM pk_cursor_correct INTO @CurrentTable; +FETCH NEXT FROM pk_cursor INTO @CurrentTable; WHILE @@FETCH_STATUS = 0 BEGIN @@ -243,62 +240,58 @@ BEGIN END CATCH -- Hole den nächsten TableName - FETCH NEXT FROM pk_cursor_correct INTO @CurrentTable; + FETCH NEXT FROM pk_cursor INTO @CurrentTable; END -- Schließe und deallokiere den Cursor -CLOSE pk_cursor_correct; -DEALLOCATE pk_cursor_correct; +CLOSE pk_cursor; +DEALLOCATE pk_cursor; -- Deklariere Variablen für die Spalten-Schleife -DECLARE @Suffix NVARCHAR(128); -DECLARE @TargetTableName NVARCHAR(128); +DECLARE @TargetTable NVARCHAR(128); DECLARE @CurrentColumn NVARCHAR(128); DECLARE @ColumnType NVARCHAR(128); DECLARE @AddColumnSQL NVARCHAR(MAX); -- Deklariere und öffne einen Cursor, um durch die Spalten zu iterieren DECLARE column_cursor CURSOR FOR - SELECT Suffix, ColumnName, ColumnType FROM @ColumnsToAdd; + SELECT TableName, ColumnName, ColumnType FROM @ColumnsToAdd; OPEN column_cursor; -FETCH NEXT FROM column_cursor INTO @Suffix, @CurrentColumn, @ColumnType; +FETCH NEXT FROM column_cursor INTO @TargetTable, @CurrentColumn, @ColumnType; WHILE @@FETCH_STATUS = 0 BEGIN BEGIN TRY - -- Rekonstruiere den vollständigen Tabellennamen - SET @TargetTableName = 'begehung_' + @Suffix; - -- Überprüfe, ob die Spalte bereits existiert IF NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS - WHERE TABLE_NAME = @TargetTableName + WHERE TABLE_NAME = @TargetTable AND COLUMN_NAME = @CurrentColumn AND TABLE_SCHEMA = 'dbo' ) BEGIN -- Definiere das ALTER TABLE Statement zum Hinzufügen der Spalte - SET @AddColumnSQL = N'ALTER TABLE dbo.[' + @TargetTableName + N'] ADD [' + @CurrentColumn + N'] ' + @ColumnType + N';'; + SET @AddColumnSQL = N'ALTER TABLE dbo.[' + @TargetTable + N'] ADD [' + @CurrentColumn + N'] ' + @ColumnType + N';'; -- Führe das dynamische SQL aus EXEC sp_executesql @AddColumnSQL; - PRINT 'Spalte ' + @CurrentColumn + ' wurde zu ' + @TargetTableName + ' hinzugefügt.'; + PRINT 'Spalte ' + @CurrentColumn + ' wurde zu ' + @TargetTable + ' hinzugefügt.'; END ELSE BEGIN - PRINT 'Spalte ' + @CurrentColumn + ' existiert bereits in ' + @TargetTableName + '.'; + PRINT 'Spalte ' + @CurrentColumn + ' existiert bereits in ' + @TargetTable + '.'; END END TRY BEGIN CATCH - PRINT 'Fehler beim Hinzufügen der Spalte ' + @CurrentColumn + ' zu ' + @TargetTableName + ': ' + ERROR_MESSAGE(); + 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 @Suffix, @CurrentColumn, @ColumnType; + FETCH NEXT FROM column_cursor INTO @TargetTable, @CurrentColumn, @ColumnType; END -- Schließe und deallokiere den Spalten-Cursor @@ -311,25 +304,22 @@ DECLARE @DeleteColumnSQL NVARCHAR(MAX); -- Deklariere und öffne einen Cursor, um durch die Tabellen zu iterieren DECLARE delete_cursor CURSOR FOR - SELECT DISTINCT Suffix FROM @ColumnsToAdd; + SELECT DISTINCT TableName FROM @ColumnsToAdd; OPEN delete_cursor; -FETCH NEXT FROM delete_cursor INTO @Suffix; +FETCH NEXT FROM delete_cursor INTO @TargetTable; WHILE @@FETCH_STATUS = 0 BEGIN BEGIN TRY - -- Rekonstruiere den vollständigen Tabellennamen - SET @TargetTableName = 'begehung_' + @Suffix; - -- Hole alle existierenden Spalten in der Tabelle DECLARE @ExistingColumns TABLE (ColumnName NVARCHAR(128)); INSERT INTO @ExistingColumns (ColumnName) SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS - WHERE TABLE_NAME = @TargetTableName + WHERE TABLE_NAME = @TargetTable AND TABLE_SCHEMA = 'dbo'; -- Iteriere durch jede existierende Spalte @@ -346,27 +336,27 @@ BEGIN IF NOT EXISTS ( SELECT 1 FROM @ColumnsToAdd - WHERE Suffix = @Suffix + WHERE TableName = @TargetTable AND ColumnName = @ExistingColumnLoop ) BEGIN BEGIN TRY -- Definiere das ALTER TABLE Statement zum Löschen der Spalte - SET @DeleteColumnSQL = N'ALTER TABLE dbo.[' + @TargetTableName + N'] DROP COLUMN [' + @ExistingColumnLoop + N'];'; + SET @DeleteColumnSQL = N'ALTER TABLE dbo.[' + @TargetTable + N'] DROP COLUMN [' + @ExistingColumnLoop + N'];'; -- Führe das dynamische SQL aus EXEC sp_executesql @DeleteColumnSQL; - PRINT 'Spalte ' + @ExistingColumnLoop + ' wurde aus ' + @TargetTableName + ' gelöscht.'; + PRINT 'Spalte ' + @ExistingColumnLoop + ' wurde aus ' + @TargetTable + ' gelöscht.'; END TRY BEGIN CATCH -- Ignoriere den Fehler und fahre fort - PRINT 'Fehler beim Löschen der Spalte ' + @ExistingColumnLoop + ' aus ' + @TargetTableName + ': ' + ERROR_MESSAGE(); + PRINT 'Fehler beim Löschen der Spalte ' + @ExistingColumnLoop + ' aus ' + @TargetTable + ': ' + ERROR_MESSAGE(); END CATCH END ELSE BEGIN - PRINT 'Spalte ' + @ExistingColumnLoop + ' ist erlaubt in ' + @TargetTableName + '.'; + PRINT 'Spalte ' + @ExistingColumnLoop + ' ist erlaubt in ' + @TargetTable + '.'; END FETCH NEXT FROM ExistingColumnCursor INTO @ExistingColumnLoop; @@ -377,13 +367,13 @@ BEGIN DEALLOCATE ExistingColumnCursor; END TRY BEGIN CATCH - PRINT 'Fehler beim Überprüfen/Löschen von Spalten in ' + @TargetTableName + ': ' + ERROR_MESSAGE(); + PRINT 'Fehler beim Überprüfen/Löschen von Spalten in ' + @TargetTable + ': ' + ERROR_MESSAGE(); END CATCH - -- Hole den nächsten Suffix - FETCH NEXT FROM delete_cursor INTO @Suffix; + -- Hole den nächsten TableName + FETCH NEXT FROM delete_cursor INTO @TargetTable; END -- Schließe und deallokiere den Lösch-Cursor CLOSE delete_cursor; -DEALLOCATE delete_cursor; \ No newline at end of file +DEALLOCATE delete_cursor;