Riverbird Cleanup Skript für eine c-entron Datenbank
Truncated die angegebenen und gefunden Tabellen, aber löscht nicht die Tabellen selber.
Einzige Ausnahme ist die Tabelle
AssetManagementArticleAssignment
Diese beinhaltet die RMM Referenzen für die Vertragsabrechnung, das darf nicht truncated werden.
Zu beachten ist der Hinweis - um die Änderungen tatsächlich zu schreiben und nicht nur einen Testlauf durchzuführen, am Ende des Statements "rollback tran" auskommentieren oder löschen und dafür "commit tran" aktiv schalten:
commit tran
-- rollback tran
Ab hier das vollständige Statement
/* ACHTUNG - Das Skript läuft in einer Transaction # INFO Wird das Skript in diesem Stand ausgeführt, wird ein Testlauf initiiert und am Ende mit dem Kommanda rollback tran die Datenbank vollständig auf den vorherigen Stand zurückgesetzt, also kein Änderung durchgeführt # 2DO Bei fehlerfreiem Durchlauf des Testlaufs den Rollback am ENDE dieses Statements auskommentieren: -- rollback tran und im Gegenzug "commit tran" aktiv schalten, durch Löschen der beiden "--" vor "commit tran" Das Statement nach dieser Änderung erneut ausführen um die Änderungen zu schreiben*/begin tran-- Überprüfen, ob die Prozedur bereits existiert, und sie dann ändern
IF OBJECT_ID('TruncateRiverTablesWithPrefixes', 'P') IS NOT NULL DROP PROCEDURE TruncateRiverTablesWithPrefixes;GOCREATE PROCEDURE TruncateRiverTablesWithPrefixesASBEGIN DECLARE @table NVARCHAR(256); DECLARE @foreignKey NVARCHAR(256); DECLARE @dropForeignKeySQL NVARCHAR(MAX); DECLARE @truncateSQL NVARCHAR(MAX); -- Schritt 1: Alle relevanten Tabellen dynamisch finden PRINT 'Phase 1: Finding tables with the specified prefixes...'; DECLARE @tableList TABLE (tableName NVARCHAR(256)); -- Alle Tabellen mit den angegebenen Präfixen in eine temporäre Liste einfügen INSERT INTO @tableList (tableName) SELECT name FROM sys.tables WHERE 1 = 1 and ((name LIKE 'AssetManagement%') OR (name LIKE 'DocumentationWizard%') OR (name LIKE 'DocuWizard%') OR (name LIKE 'Mon%') OR (name LIKE 'Deployable%') OR (name LIKE 'Remote%')) OR (name LIKE 'RBSync%') OR (name LIKE 'DocumentationPageOldVersions') OR (name LIKE 'PatchManagementDeployable%') OR (name LIKE 'RiverbirdAgentDeployment%') and name <> 'AssetManagementArticleAssignment'; -- Schritt 2: Alle Foreign Keys löschen PRINT 'Phase 2: Deleting all Foreign Keys for the found tables...'; DECLARE table_cursor CURSOR FOR SELECT tableName FROM @tableList; OPEN table_cursor; FETCH NEXT FROM table_cursor INTO @table; WHILE @@FETCH_STATUS = 0 BEGIN -- Innerer Cursor zum Finden von Foreign Keys, die auf die aktuelle Tabelle verweisen DECLARE foreignKey_cursor CURSOR FOR SELECT fk.name AS foreignKeyName FROM sys.foreign_keys AS fk WHERE OBJECT_NAME(fk.parent_object_id) = @table; OPEN foreignKey_cursor; FETCH NEXT FROM foreignKey_cursor INTO @foreignKey; -- Entferne alle Foreign Keys, die auf die Tabelle verweisen WHILE @@FETCH_STATUS = 0 BEGIN -- Dynamisches Löschen des Foreign Keys SET @dropForeignKeySQL = 'ALTER TABLE ' + @table + ' DROP CONSTRAINT ' + @foreignKey; PRINT 'Executing: ' + @dropForeignKeySQL; -- Zeigt den auszuführenden SQL-Befehl an EXEC sp_executesql @dropForeignKeySQL; FETCH NEXT FROM foreignKey_cursor INTO @foreignKey; END; CLOSE foreignKey_cursor; DEALLOCATE foreignKey_cursor; FETCH NEXT FROM table_cursor INTO @table; END; -- Cursor schließen und Ressourcen freigeben CLOSE table_cursor; DEALLOCATE table_cursor; -- Schritt 3: Alle Tabellen leeren (TRUNCATE TABLE) PRINT 'Phase 3: Truncating all tables...'; -- Neuer Cursor für den zweiten Durchlauf, um die Tabellen zu leeren DECLARE truncate_cursor CURSOR FOR SELECT tableName FROM @tableList order by tableName; OPEN truncate_cursor; FETCH NEXT FROM truncate_cursor INTO @table; WHILE @@FETCH_STATUS = 0 BEGIN -- TRUNCATE TABLE für jede Tabelle SET @truncateSQL = 'TRUNCATE TABLE ' + @table; PRINT 'Executing: ' + @truncateSQL; -- Zeigt den auszuführenden SQL-Befehl an EXEC sp_executesql @truncateSQL; FETCH NEXT FROM truncate_cursor INTO @table; END; -- Cursor schließen und Ressourcen freigeben CLOSE truncate_cursor; DEALLOCATE truncate_cursor; PRINT 'Operation completed successfully.';END;GO-- Prozedur sofort ausführenEXEC TruncateRiverTablesWithPrefixes;-- Prozedur nach der Ausführung löschen, um die Datenbank aufzuräumenDROP PROCEDURE TruncateRiverTablesWithPrefixes;GO/* Bei fehlerfreiem Durchlauf commit tran ausführen lassen und rollback tran deaktivieren */-- commit tranrollback tran