91 lines
3.4 KiB
Transact-SQL
91 lines
3.4 KiB
Transact-SQL
--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; |