--DROP TABLE TBDD_MigrationScripts CREATE TABLE TBDD_MigrationLog ( MigrationID INTEGER NOT NULL, ExecutedWhen DATETIME NOT NULL, ExecutedWho VARCHAR(50) NOT NULL, ExecState VARCHAR(50), ErrorMessage VARCHAR(500), CONSTRAINT PK_TBDD_MigrationLog PRIMARY KEY (MigrationID) ) GO --DROP TABLE TBDD_MigrationScripts CREATE TABLE TBDD_MigrationScripts ( MigrationID INTEGER IDENTITY(1,1), ScriptName VARCHAR(255) NOT NULL, ModuleName VARCHAR(100) NOT NULL, ScriptType VARCHAR(255), ScriptPath_Command NVARCHAR(MAX), IsActive BIT NOT NULL DEFAULT 0, AddedWhen DATETIME NOT NULL DEFAULT GETDATE() CONSTRAINT PK_TBDD_MigrationScripts PRIMARY KEY (MigrationID) ) GO INSERT INTO TBDD_MigrationScripts (ScriptName, ModuleName, ScriptType, ScriptPath_Command, IsActive) VALUES ('007', 'fileFLOW','FILE', 'E:\TreeSizeFree\1.9.8.1.sql', 1); GO CREATE PROCEDURE PRDD_MigrationsExecute @Test BIT AS BEGIN DECLARE @MigrationID INT, @ScriptName VARCHAR(255), @ScriptPath_Command NVARCHAR(MAX), @SQL NVARCHAR(MAX),@ScriptType VARCHAR(20); DECLARE @ROOT_FOLDER VARCHAR(500) = 'E:\DocumentProcessing\Manual\File\DBMigration\' DECLARE MigrationCursor CURSOR FOR SELECT MS.MigrationID, MS.ScriptName, ScriptPath_Command,MS.ScriptType FROM TBDD_MigrationScripts MS LEFT JOIN TBDD_MigrationLog ML ON MS.MigrationID = ML.MigrationID WHERE MS.IsActive = 1 AND ML.MigrationID IS NULL ORDER BY MS.MigrationID; OPEN MigrationCursor; FETCH NEXT FROM MigrationCursor INTO @MigrationID, @ScriptName, @ScriptPath_Command,@ScriptType; WHILE @@FETCH_STATUS = 0 BEGIN BEGIN TRY -- Lies das SQL-Skript aus der Datei IF @ScriptType = 'FILE' BEGIN DECLARE @DynamicSQL NVARCHAR(500), @FileContent NVARCHAR(MAX); SET @DynamicSQL = 'SELECT @FileContentOut = BulkColumn FROM OPENROWSET(BULK ''' + @ScriptPath_Command + ''', SINGLE_CLOB) AS FileContent'; EXEC sp_executesql @DynamicSQL, N'@FileContentOut NVARCHAR(MAX) OUTPUT', @FileContent OUTPUT; SET @SQL = @FileContent; PRINT '============= COMMAND FROM FILE =================' PRINT @SQL PRINT '==============================' END ELSE SET @SQL = @ScriptPath_Command; -- Führe das Skript aus IF @Test = 1 BEGIN PRINT 'EXECUTING - MIGRATION SKRIPT [' + @ScriptName + '] ...' EXEC sp_executesql @SQL; PRINT '########################################' PRINT 'EXECUTION SUCCESSFUL!' PRINT '########################################' END IF @Test = 0 -- Erfolgreiche Migration protokollieren INSERT INTO TBDD_MigrationLog (MigrationID, ExecutedWhen, ExecutedWho, ExecState) VALUES (@MigrationID, GETDATE(), SYSTEM_USER, 'Success'); END TRY BEGIN CATCH DECLARE @ERR VARCHAR(1500) = ERROR_MESSAGE(); PRINT @ERR -- Fehler protokollieren INSERT INTO TBDD_MigrationLog (MigrationID, ExecutedWhen, ExecutedWho, ExecState, ErrorMessage) VALUES (@MigrationID, GETDATE(), 'XXXX', 'Failed', @ERR); BREAK; END CATCH; PRINT '' FETCH NEXT FROM MigrationCursor INTO @MigrationID, @ScriptName, @ScriptPath_Command,@ScriptType; END; CLOSE MigrationCursor; DEALLOCATE MigrationCursor; END;