Ermitteln und physikalisches Löschen von Dateien im topfact Archiv!
Wenn Dateien im topfact Archiv! selektiv physikalisch gelöscht werden sollen stellt sich als erstes die Frage, welcher Datenbankeintrag verweist auf welche Datei, bzw. welches Verzeichnis. Über eine MSSQL Funktion (UserDefinedFunction) kann der Pfad berechnet werden. In der Folge kann mittels einfacher SQL-Abfrage die Liste der zu löschenden Dateien erstellt und als CMD Befehl ausgeführt werden.
Vorgehensweise:
- Erstellen der UserDefinedFunction [dbo].[GetOrdnerByDocId]
- Ermitteln der Einträge die gelöscht werden sollen, z.B Version = 'alt' und Ausgabe als Löschskript für die CMD-Box
- Aufruf des Löschskripts
1. Erstellen der UserDefinedFunction [dbo].[GetOrdnerByDocId]
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create FUNCTION [dbo].[GetOrdnerByDocId]
(
@docid VARCHAR(50)
)
RETURNS VARCHAR(255)
AS
BEGIN
DECLARE @ordner VARCHAR(50)
DECLARE @a VARCHAR(50)
DECLARE @p VARCHAR(50) = 'D:\topfactArchiv\001\'
SELECT @a = REPLICATE('0', 9 -LEN(@docid))
SELECT @a = @a + @docid
SELECT @a = SUBSTRING(@a,1,3) + '\' + SUBSTRING(@a,4,3) + '\' + SUBSTRING(@a,7,3)
SELECT @ordner = @p + @a
RETURN @ordner
END
2. Ermitteln der Einträge:
Vorbereitung Löschskript mit RD als CMD Befehl. Die Paramenter /S /Q verhindern nachfragen ob wirklich gelöscht werden soll.
SELECT
'rd /S /Q ' as x,
dbo.GetOrdnerByDocId(tf_docid) AS Ordner
FROM [topfactArchiv].[dbo].[tf_Archive001]
where
versionstatus = 'alt'
Beispielergebnis:
rd /S /Q D:\topfactArchiv\001\001\391\450
rd /S /Q D:\topfactArchiv\001\001\391\453
3. Aufruf des Löschskripts
Die Ausgabe wurde in eine .bat kopiert und diese mit Rechtsklick "als Administrator starten" aufgerufen.