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