Update sql-struktur.sql
usersettings hinzugefügt und stammdaten verworfen, wird mit javascript erstellt
This commit is contained in:
388
sql-struktur.sql
388
sql-struktur.sql
@@ -18,252 +18,130 @@ INSERT INTO @TableSuffixes (Suffix) VALUES
|
||||
('dusche'),
|
||||
('waschbecken'),
|
||||
('allgemein'),
|
||||
('stammdaten'); -- Neue Tabelle ohne engomoid
|
||||
('usersettings');
|
||||
|
||||
-- Deklariere eine Tabellenvariable mit den Spalteninformationen
|
||||
DECLARE @ColumnsToAdd TABLE (
|
||||
TableName NVARCHAR(128),
|
||||
ColumnName NVARCHAR(128),
|
||||
ColumnType NVARCHAR(128)
|
||||
ColumnName 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 (TableName, ColumnName) VALUES
|
||||
-- begehung_extras
|
||||
(@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'),
|
||||
(@TablePrefix + 'extras', 'engomoid'),
|
||||
(@TablePrefix + 'extras', 'raum_bezeichnung'),
|
||||
(@TablePrefix + 'extras', 'handtuchheizkoerper'),
|
||||
(@TablePrefix + 'extras', 'badetuchhalter'),
|
||||
(@TablePrefix + 'extras', 'waschmaschinenanschluss'),
|
||||
(@TablePrefix + 'extras', 'notizen'),
|
||||
|
||||
-- begehung_raeume
|
||||
(@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'),
|
||||
(@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', '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'),
|
||||
(@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', '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'),
|
||||
(@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', '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'),
|
||||
(@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', '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'),
|
||||
(@TablePrefix + 'toilette', 'engomoid'),
|
||||
(@TablePrefix + 'toilette', 'raum_bezeichnung'),
|
||||
(@TablePrefix + 'toilette', 'sitz_mit_deckel'),
|
||||
(@TablePrefix + 'toilette', 'sitz_mit_deckel_softclose'),
|
||||
(@TablePrefix + 'toilette', 'toilettenpapierhalter'),
|
||||
|
||||
-- begehung_stammdaten
|
||||
(@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);
|
||||
DECLARE @FullTableName NVARCHAR(256);
|
||||
DECLARE @CreateTableColumns NVARCHAR(MAX);
|
||||
DECLARE @SQL_CREATE NVARCHAR(MAX); -- Korrigierte Deklaration
|
||||
|
||||
-- Deklariere und öffne einen Cursor, um durch die Tabellennamen-Endungen zu iterieren
|
||||
DECLARE table_cursor CURSOR FOR
|
||||
SELECT Suffix FROM @TableSuffixes;
|
||||
|
||||
OPEN table_cursor;
|
||||
|
||||
FETCH NEXT FROM table_cursor INTO @CurrentSuffix;
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
BEGIN TRY
|
||||
-- Erstelle den vollständigen Tabellennamen mit dem Präfix
|
||||
SET @FullTableName = @TablePrefix + @CurrentSuffix;
|
||||
|
||||
-- Überprüfe, ob die Tabelle bereits existiert in der Datenbank 'engomo'
|
||||
IF NOT EXISTS (
|
||||
SELECT *
|
||||
FROM INFORMATION_SCHEMA.TABLES
|
||||
WHERE TABLE_NAME = @FullTableName
|
||||
AND TABLE_SCHEMA = 'dbo'
|
||||
)
|
||||
BEGIN
|
||||
-- Definiere das CREATE TABLE Statement basierend auf den erlaubten Spalten
|
||||
-- Die Spalteninformationen werden aus @ColumnsToAdd gefiltert
|
||||
|
||||
SET @CreateTableColumns = (
|
||||
SELECT STRING_AGG('[' + ColumnName + '] ' + ColumnType, ', ')
|
||||
FROM @ColumnsToAdd
|
||||
WHERE TableName = @FullTableName
|
||||
);
|
||||
|
||||
IF @CreateTableColumns IS NULL OR LEN(@CreateTableColumns) = 0
|
||||
BEGIN
|
||||
PRINT 'Keine Spalten definiert für Tabelle ' + @FullTableName + '. Tabelle wird nicht erstellt.';
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
SET @SQL_CREATE = N'CREATE TABLE dbo.[' + @FullTableName + N'] (' + @CreateTableColumns + N');';
|
||||
|
||||
-- Führe das dynamische SQL aus
|
||||
EXEC sp_executesql @SQL_CREATE;
|
||||
|
||||
PRINT 'Tabelle ' + @FullTableName + ' wurde erstellt.';
|
||||
END
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
PRINT 'Tabelle ' + @FullTableName + ' existiert bereits.';
|
||||
END
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
PRINT 'Fehler beim Erstellen der Tabelle ' + @FullTableName + ': ' + ERROR_MESSAGE();
|
||||
END CATCH
|
||||
|
||||
-- Hole den nächsten Suffix
|
||||
FETCH NEXT FROM table_cursor INTO @CurrentSuffix;
|
||||
END
|
||||
|
||||
-- Schließe und deallokiere den Cursor
|
||||
CLOSE table_cursor;
|
||||
DEALLOCATE table_cursor;
|
||||
|
||||
-- Füge den PRIMARY KEY für jede Tabelle hinzu, die engomoid hat
|
||||
DECLARE @CurrentTable NVARCHAR(128);
|
||||
DECLARE @PKName NVARCHAR(128);
|
||||
DECLARE @AddPKSQL NVARCHAR(MAX);
|
||||
|
||||
DECLARE pk_cursor CURSOR FOR
|
||||
SELECT DISTINCT TableName
|
||||
FROM @ColumnsToAdd
|
||||
WHERE ColumnName = 'engomoid';
|
||||
|
||||
OPEN pk_cursor;
|
||||
|
||||
FETCH NEXT FROM pk_cursor INTO @CurrentTable;
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
BEGIN TRY
|
||||
-- Überprüfe, ob der PRIMARY KEY bereits existiert
|
||||
IF NOT EXISTS (
|
||||
SELECT *
|
||||
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
|
||||
WHERE TABLE_NAME = @CurrentTable
|
||||
AND CONSTRAINT_TYPE = 'PRIMARY KEY'
|
||||
AND TABLE_SCHEMA = 'dbo'
|
||||
)
|
||||
BEGIN
|
||||
-- Definiere den Constraint-Namen
|
||||
SET @PKName = 'PK_' + @CurrentTable;
|
||||
|
||||
-- Definiere das ALTER TABLE Statement zum Hinzufügen des PRIMARY KEY
|
||||
SET @AddPKSQL = N'ALTER TABLE dbo.[' + @CurrentTable + N'] ADD CONSTRAINT [' + @PKName + N'] PRIMARY KEY (engomoid);';
|
||||
|
||||
-- Führe das dynamische SQL aus
|
||||
EXEC sp_executesql @AddPKSQL;
|
||||
|
||||
PRINT 'Primary Key auf engomoid in ' + @CurrentTable + ' wurde hinzugefügt.';
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
PRINT 'Primary Key auf engomoid in ' + @CurrentTable + ' existiert bereits.';
|
||||
END
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
PRINT 'Fehler beim Hinzufügen des Primary Keys zu ' + @CurrentTable + ': ' + ERROR_MESSAGE();
|
||||
END CATCH
|
||||
|
||||
-- Hole den nächsten TableName
|
||||
FETCH NEXT FROM pk_cursor INTO @CurrentTable;
|
||||
END
|
||||
|
||||
-- Schließe und deallokiere den Cursor
|
||||
CLOSE pk_cursor;
|
||||
DEALLOCATE pk_cursor;
|
||||
-- begehung_usersettings
|
||||
(@TablePrefix + 'usersettings', 'user_mail'),
|
||||
(@TablePrefix + 'usersettings', 'user_theme');
|
||||
|
||||
-- Deklariere Variablen für die Spalten-Schleife
|
||||
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 TableName, ColumnName, ColumnType FROM @ColumnsToAdd;
|
||||
SELECT TableName, ColumnName FROM @ColumnsToAdd;
|
||||
|
||||
OPEN column_cursor;
|
||||
|
||||
FETCH NEXT FROM column_cursor INTO @TargetTable, @CurrentColumn, @ColumnType;
|
||||
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 *
|
||||
@@ -273,8 +151,8 @@ BEGIN
|
||||
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';';
|
||||
-- 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;
|
||||
@@ -291,89 +169,9 @@ BEGIN
|
||||
END CATCH
|
||||
|
||||
-- Hole die nächste Spalte
|
||||
FETCH NEXT FROM column_cursor INTO @TargetTable, @CurrentColumn, @ColumnType;
|
||||
FETCH NEXT FROM column_cursor INTO @TargetTable, @CurrentColumn;
|
||||
END
|
||||
|
||||
-- Schließe und deallokiere den Spalten-Cursor
|
||||
CLOSE column_cursor;
|
||||
DEALLOCATE column_cursor;
|
||||
|
||||
-- Deklariere Variablen für die Lösch-Schleife
|
||||
DECLARE @ExistingColumnLoop NVARCHAR(128);
|
||||
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;
|
||||
|
||||
OPEN delete_cursor;
|
||||
|
||||
FETCH NEXT FROM delete_cursor INTO @TargetTable;
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
BEGIN TRY
|
||||
-- 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
|
||||
AND TABLE_SCHEMA = 'dbo';
|
||||
|
||||
-- Iteriere durch jede existierende Spalte
|
||||
DECLARE ExistingColumnCursor CURSOR LOCAL FAST_FORWARD FOR
|
||||
SELECT ColumnName FROM @ExistingColumns;
|
||||
|
||||
OPEN ExistingColumnCursor;
|
||||
|
||||
FETCH NEXT FROM ExistingColumnCursor INTO @ExistingColumnLoop;
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
-- Überprüfe, ob die Spalte in den erlaubten Spalten ist
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM @ColumnsToAdd
|
||||
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.[' + @TargetTable + N'] DROP COLUMN [' + @ExistingColumnLoop + N'];';
|
||||
|
||||
-- Führe das dynamische SQL aus
|
||||
EXEC sp_executesql @DeleteColumnSQL;
|
||||
|
||||
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 ' + @TargetTable + ': ' + ERROR_MESSAGE();
|
||||
END CATCH
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
PRINT 'Spalte ' + @ExistingColumnLoop + ' ist erlaubt in ' + @TargetTable + '.';
|
||||
END
|
||||
|
||||
FETCH NEXT FROM ExistingColumnCursor INTO @ExistingColumnLoop;
|
||||
END
|
||||
|
||||
-- Schließe und deallokiere den existierenden Spalten-Cursor
|
||||
CLOSE ExistingColumnCursor;
|
||||
DEALLOCATE ExistingColumnCursor;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
PRINT 'Fehler beim Überprüfen/Löschen von Spalten in ' + @TargetTable + ': ' + ERROR_MESSAGE();
|
||||
END CATCH
|
||||
|
||||
-- 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;
|
||||
|
||||
Reference in New Issue
Block a user