Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Active Directory DistinguishedName-Feld OUs per sql bulkimport zerlegen

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von weini79, 25 Juli 2012.

  1. weini79

    weini79 Neuer Benutzer

    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
     
  2. ukulele

    ukulele Datenbank-Guru

    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.
     
    PLSQL_SQL gefällt das.
Die Seite wird geladen...
Ähnliche Themen - Active Directory DistinguishedName
  1. Squicky
    Antworten:
    2
    Aufrufe:
    4.487

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden