From b4db924b6b270f8d006960f142be984b5a9d4d1d Mon Sep 17 00:00:00 2001 From: admManuel Date: Sun, 20 Oct 2024 18:20:58 +0000 Subject: [PATCH] Update sql-struktur.sql MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit deklarationen zu beginn für übersichtlichkeit --- sql-struktur.sql | 127 +++++++++++++++++++++++++---------------------- 1 file changed, 67 insertions(+), 60 deletions(-) diff --git a/sql-struktur.sql b/sql-struktur.sql index 68bc862..e927ad8 100644 --- a/sql-struktur.sql +++ b/sql-struktur.sql @@ -1,6 +1,8 @@ -- 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_'; @@ -9,6 +11,17 @@ 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'), @@ -20,12 +33,6 @@ INSERT INTO @TableSuffixes (Suffix) VALUES ('allgemein'), ('usersettings'); --- Deklariere eine Tabellenvariable mit den Spalteninformationen -DECLARE @ColumnsToAdd TABLE ( - TableName NVARCHAR(128), - ColumnName NVARCHAR(128) -); - -- Füge die gewünschten Spalten hinzu, einschließlich begehung_stammdaten ohne engomoid INSERT INTO @ColumnsToAdd (TableName, ColumnName) VALUES -- begehung_extras @@ -111,66 +118,66 @@ INSERT INTO @ColumnsToAdd (TableName, ColumnName) VALUES (@TablePrefix + 'usersettings', 'user_mail'), (@TablePrefix + 'usersettings', 'user_theme'); --- Deklariere Variablen für die Spalten-Schleife -DECLARE @TargetTable NVARCHAR(128); -DECLARE @CurrentColumn NVARCHAR(128); -DECLARE @AddColumnSQL NVARCHAR(MAX); - --- Deklariere und öffne einen Cursor, um durch die Spalten zu iterieren +-- Verwende eine set-basierte Methode, um durch die Spalten zu iterieren DECLARE column_cursor CURSOR FOR SELECT TableName, ColumnName FROM @ColumnsToAdd; OPEN column_cursor; -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 +BEGIN TRY FETCH NEXT FROM column_cursor INTO @TargetTable, @CurrentColumn; -END + + 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;