Script zur Überprüfung "Anhänge an Vorgängen" (siehe Umsteller-Checkliste Kapitel 2.3.3)

Bitte beachten Sie die folgenden Hinweise zur Ausführung von SQL-Anweisungen:

 

1. Stellen Sie sicher, dass vor Durchführung der Korrekturanweisungen eine aktuelle Datensicherung Ihres Datenbestandes vorliegt.

2. Stellen Sie sicher, dass die SQL-Anweisung nur durch einen Anwender ausgeführt wird, der sich über den Sachverhalt im Klaren ist.

3. Stellen Sie sicher, dass während der Ausführung der SQL-Anweisung kein Benutzer in dem zu ändernden Mandanten angemeldet ist.

4. Die Abarbeitung der SQL-Anweisung kann je nach Volumen des Datenbestandes einige Zeit in Anspruch nehmen.

5. Prüfen Sie nach Ausführung der SQL-Anweisung, ob das gewünschte Ergebnis eingetreten ist.

 

/**_______________________________________________________________________

(c) 2021 Diamant Software GmbH

Dieses Skript prüft ob Anhänge existieren, die lokal gespeichert
und nicht vom System verwaltet werden. Vorgänge die solche Anhänge
beinhaltet werden inkl. den Namen des Anhangs, der Datenbank, des Benutzers und
des Speicherorts aufgelistet.

!!! A U F S Y S T E M D A T E N B A N K A U S F Ü H R E N !!!

_____________________________________________________________________**/
SET NOCOUNT ON

DECLARE @tblResult TABLE (
DbName SYSNAME NOT NULL,
Benutzer NVARCHAR(10) NOT NULL,
Vorgang NVARCHAR(255) NOT NULL,
Art NVARCHAR(10) NULL,
Anhang NVARCHAR(512),
Pfad NVARCHAR(512)
)

DECLARE @servername SYSNAME = CAST(SERVERPROPERTY('ServerName') AS sysname);
DECLARE @servercollation SYSNAME = CAST(SERVERPROPERTY('Collation') AS sysname);
DECLARE
@companyid INT,
@dbserver VARCHAR(30),
@dbname VARCHAR(20)

-- alle Datenbanken aus dem Firmenverzeichnis auslesen
DECLARE dbCur CURSOR FAST_FORWARD FOR
SELECT Firmennummer, RTRIM(Datenbankserver), RTRIM(Datenbankname)
FROM Firmenverzeichnis
OPEN dbCur
FETCH NEXT FROM dbCur INTO @companyid, @dbserver, @dbname
WHILE @@FETCH_STATUS = 0
BEGIN
IF (UPPER(@dbserver) != UPPER(CAST(SERVERPROPERTY('ServerName') AS sysname)))
PRINT 'Die Datenbank ' + QUOTENAME(@dbName) + ' kann nicht geprüft werden, da sie auf einem anderen Datenbankserver liegt (Server: ' + QUOTENAME(@dbserver) + ').'
ELSE IF (NOT EXISTS(SELECT * FROM master..sysdatabases WHERE name = @dbname))
PRINT 'Die Datenbank ' + QUOTENAME(@dbName) + ' kann nicht geprüft werden, da sie nicht auf dem Datenbankserver verfügbar ist (Server: ' + QUOTENAME(@dbserver) + ').'
ELSE BEGIN

DECLARE @sql NVARCHAR(4000) = '-- Ermitteln lokal verlinkter Anhaenge
SELECT distinct '' ' + QUOTENAME(@dbname) + ' '' as ''DBName'', ext.GeaendertVon as ''Benutzer'', inf.Titel as ''Vorgang'', inf.Art as ''Art'', ext.Titel as ''Anhang'', ext.Pfad
FROM ' + QUOTENAME(@dbname) + '..Infoextern ext
LEFT JOIN ' + QUOTENAME(@dbname) + '..Info inf (NOLOCK)
ON(ext.Info = inf.Nummer)
WHERE Typ =''U'' AND Pfad like ''[A-Z][:]%''
order by ''DBName'', ext.GeaendertVon, Vorgang, ext.Titel
';
END

INSERT INTO @tblResult
EXEC sp_executesql @sql , N'@dbname VARCHAR(20), @dbserver VARCHAR(30)', @dbname = @dbname, @dbserver = @dbserver;

FETCH NEXT FROM dbCur INTO @companyid, @dbserver, @dbname
END -- end while

CLOSE dbCur
DEALLOCATE dbcur

SELECT * FROM @tblResult

go