0 Pluspunkte 0 Minuspunkte

Ich habe eine CSV Datei in der Dateipfade (Windows) stehen.

FolderPath;IdentityReference;FileSystemRights;IsInherited
"\\FILESERVER\litplus\00000098b8128a401";D2000\Share_Litplus_read;ReadAndExecute, Synchronize;True
"\\FILESERVER\litplus\00000098b8128a401";D2000\Share_Litplus_write;Modify, Synchronize;True
"\\FILESERVER\litplus\01ab8692ea13dbe03";D2000\Share_Litplus_read;ReadAndExecute, Synchronize;True
"\\FILESERVER\litplus\01ab8692ea13dbe03";D2000\Share_Litplus_write;Modify, Synchronize;True
"\\FILESERVER\litplus\01ab8692ea13deb06";D2000\Share_Litplus_read;ReadAndExecute, Synchronize;True
"\\FILESERVER\litplus\01ab8692ea13deb06";D2000\Share_Litplus_write;Modify, Synchronize;True

Ich versuche die Datei mit LOAD DATA INFILE zu importieren.

LOAD DATA INFILE 'C:/Scripts/Berechtigungsaudit/Shares/2024/litplus_ntfs_2024-10-16.csv' 
INTO TABLE FileShare 
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\r\n'
IGNORE 1 ROWS
(FolderPath, IdentityReference, FileSystemRights, IsInherited);

Aber aus den Pfaden wird aus

"\\FILESERVER\litplus\00000098b8128a401"

z.B das

"\FILESERVERlitplus00000098b8128a401"

Die Backslashes gehen also einfach verloren. Wie importiere ich die Datei so das genau die Pfade in der Datenbank stehen?

von  

2 Antworten

0 Pluspunkte 0 Minuspunkte

Du kannst versuchen, die Daten erst in eine temporäre Tabelle zu speichern und danach daraus auslesen und die Zeichen ersetzt in deine richtige Tabelle speichern.

CREATE TEMPORARY TABLE TempFileShare (
    FolderPath VARCHAR(255),
    IdentityReference VARCHAR(255),
    FileSystemRights VARCHAR(255),
    IsInherited VARCHAR(255)
);
LOAD DATA INFILE 'C:/Scripts/Berechtigungsaudit/Shares/2024/litplus_ntfs_2024-10-16.csv' 
INTO TABLE FileShare 
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\r\n'
IGNORE 1 ROWS
(FolderPath, IdentityReference, FileSystemRights, IsInherited);
INSERT INTO FileShare (FolderPath, IdentityReference, FileSystemRights, IsInherited)
SELECT 
    REPLACE(FolderPath, '', '') as FolderPath,
    IdentityReference,
    FileSystemRights,
    IsInherited
FROM TempFileShare;
von (732 Punkte)  
0 Pluspunkte 0 Minuspunkte

Wenn du die Backslashes in der Datenbank stehen haben möchtest, dann brauchst du sie nicht als Steuerzeichen behandeln. Versuche

ESCAPED BY '\\'

zu

ESCAPED BY ''

zu ändern.

von (784 Punkte)