Active Directory DistinguishedName-Feld OUs per sql bulkimport zerlegen

weini79

Neuer Benutzer
Beiträge
1
Hallo Leute - ich habe eine txt mit meinem USERN im Active Directory, welche ich mit bulkimport in eine SQL Datenbank importiere um in weiterer Folge diese mit einem anderen Programm bzw. mit einer anderen Tabelle zu vernetzen.

Soweit so gut - jemand von euch hat mir shcon geholfen die Datei zu erzeugen und diese so umzuwandeln um diese per bulkimport in die SQL Datenbank zu importieren:

Auzug aus Textdatei:
"CN=Caslavska Magda,OU=CZ,OU=Users,OU=TEST,DC=industrie,DC=vienna";m.caslavska;m.caslavska@test.com;
"CN=Stajerova Lada,OU=CZ,OU=Users,OU=TEST,DC=industrie,DC=vienna";lastajer;l.stajerova@test.com;

bulkimport

use DB1

DELETE FROM ActiveDirectory

BULK
INSERT ActiveDirectory
FROM 'C:\ADExport\exportNoHeaderSemicolon.txt'
WITH
(
FIELDTERMINATOR = ';',
ROWTERMINATOR = '\n'
)

das klappt auch - aber ich hätte das Feld Active Directory DN (Distinguished Name) Feld gerne zumindest auf 5 Ebenen aufgeteilt,
d.h. eine Spalte für OU1, OU2, OU3, OU4 und OU5

Beispiel oben wäre das:

TEST / Users /CZ / [null] / [null]

dabei wäre mir eine der 2 Varianten recht: entweder es wird der Bulkimport schon so geändert, dass dieser dies gleich in der Tabelle ActiveDirectory in die Felder reinschreibt (ich muss dann halt die Felder noch anlegen) - das wäre mir auch lieber - oder was auch möglich wäre, dass ich in einer VIEW (die ich sowieso brauche für das Vernetzen der 2 tabellen) - diese Spalten erzeuge - etwa so:


ALTER VIEW [dbo].[ActiveDirectoryae]
AS
SELECT
ad.mail,ad.account,ad.dn, ae.*, [bla substring (DN von da nach da) blabla] as ou1, [bla substring (DN von dort nach drüben) blabla] as ou2,....


from ActiveDirectory as AD left outer join
activeEmpl as AE on AD.account=AE.username


kann mir da jemand helfen?

Vielen Dank.
lg
weini79
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.582
Ich habe noch nicht mit BULK Import gearbeitet aber solange du nicht grade mehrere Trennzeichen angeben kannst( eventuell FIELDTERMINATOR IN (';',',') würde ich das ganze lieber in einem 2ten Schritt machen, um Probleme beim Import zu vermeiden. Im zweiten Schritt dann nicht als View, sondern schon in extra spalten mit einem Script nach dem Import.

Der Grund ist einfach: Beim zerlegen von Zeichenketten mit left(), right() etc. hast du schnell einen Fehler wenn die Zeichenkette mal "unerwartet" kurz ist oder irgendein Zeichen an das man sich hält zu oft vorkommt. Sobald ein Fehler auftritt bricht entweder dein Import oder deine View ab und gibt nichts mehr aus. In einer Schleife kann man in mehreren Schritten und mit viel Absicherungen durch IF Abfragen das ganze etwas zuverlässiger gestalten. Z.B.:
Code:
DECLARE    @spalte VARCHAR(2000),
        @id INT
 
WHILE    @id IS NOT NULL
BEGIN
    SET        @id = (    SELECT    TOP 1
                            id
                    FROM    ActiveDirectory
                    WHERE    OU1 IS NULL )
    SET        @spalte = (    SELECT    spalte
                        FROM    ActiveDirectory
                        WHERE    id = @id )
 
    IF    @spalte LIKE '%OU=%,%'
    BEGIN
            -- Zerlegung @spalte
    END
END

Beim Zerlegen musst du dann mit PATINDEX und CHARINDEX, LEFT und RIGHT sowie REVERSE arbeiten bis du die Zeichenkette hast die du brauchst.
 
Oben