sql >> データベース >  >> RDS >> Sqlserver

エラー:リンクサーバーADSIのOLEDBプロバイダーADsDSOObjectから行をフェッチできません

    私もこの問題にぶつかり、アカウント名の最初の文字でページングするという通常の解決策が気に入らなかった。これは、ADへの26回の個別の呼び出しを意味します。また、大規模なドメインでは、同じ最初の文字で始まる901を超えるアカウントを持つ可能性が非常に高いため、失敗する可能性があります。同じ最初の文字を使用した命名規則...

    いろいろ試してみましたが、uSNCreatedでopenqueryを注文し、外側のクエリにTOP 901句を配置しても、爆発しないことがわかりました。

    これが私のSQLで、すべてのActive Directoryオブジェクト(コンピューター、ドメインコントローラー、ユーザー、連絡先)を901レコードのチャンクで一時テーブルにフェッチし、各オブジェクトに関するいくつかの有用な情報を提供します。

    CREATE TABLE #ADData(
        Login           NVARCHAR(256)
        ,CommonName     NVARCHAR(256)
        ,GivenName      NVARCHAR(256)
        ,FamilyName     NVARCHAR(256)   
        ,DisplayName    NVARCHAR(256)
        ,Title          NVARCHAR(256)
        ,Department     NVARCHAR(256)
        ,Location       NVARCHAR(256)
        ,Info           NVARCHAR(256)
        ,LastLogin      BIGINT
        ,flags          INT
        ,Email          NVARCHAR(256)
        ,Phone          NVARCHAR(256)   
        ,Mobile         NVARCHAR(256)
        ,Quickdial      NVARCHAR(256)
        , usnCreated    INT
    )
    
    DECLARE @Query      VARCHAR (2000)
    DECLARE @Filter     VARCHAR(200)
    DECLARE @Rowcount   INT
    
    select @Filter =''
    
    WHILE ISNULL(@rowcount,901)  = 901 BEGIN
    
        SELECT @Query = '
        SELECT top 901
                Login           = SamAccountName
                , CommonName    = cn
                , GivenName
                , FamilyName    = sn    
                , DisplayName
                , Title
                , Department
                , Location      = physicalDeliveryOfficeName
                , Info
                , LastLogin     = CAST(LastLogon AS bigint)
                , flags         = CAST (UserAccountControl as int)
                , Email         = mail
                , Phone         = telephoneNumber
                , Mobile        = mobile
                , QuickDial     = Pager
                , usnCreated
            FROM OPENROWSET(''ADSDSOObject'', '''', ''
                    SELECT cn, givenName, sn, userAccountControl, lastLogon, displayName, samaccountname, 
                    title,  department, physicalDeliveryOfficeName, info, mail, telephoneNumber, mobile, pager, usncreated
                FROM ''''LDAP://[ldap-query-string]'''' 
                WHERE objectClass=''''Person''''
                AND objectClass = ''''User''''
                ' + @filter + '
                ORDER BY usnCreated'')'             
        INSERT INTO #ADData EXEC (@Query) 
        SELECT @Rowcount = @@ROWCOUNT
        SELECT @Filter = 'and usnCreated > '+ LTRIM(STR((SELECT MAX(usnCreated) FROM #ADData)))
    
    END
    
    SELECT LOGIN            
            , CommonName    
            , GivenName
            , FamilyName
            , DisplayName
            , Title         
            , Department
            , Location      
            , Email         
            , Phone         
            , QuickDial     
            , Mobile        
            , Info          
            , Disabled      = CASE WHEN CAST (flags AS INT) & 2 > 0 THEN 'Y' ELSE NULL END 
            , Locked        = CASE WHEN CAST (flags AS INT) & 16  > 0 THEN 'Y' ELSE NULL END 
            , NoPwdExpiry   = CASE WHEN CAST (flags AS INT) & 65536  > 0 THEN 'Y' ELSE NULL END 
            , LastLogin     = CASE WHEN ISNULL(CAST (LastLogin AS BIGINT),0) = 0 THEN NULL ELSE 
                                DATEADD(ms, (CAST (LastLogin AS BIGINT) / CAST(10000 AS BIGINT)) % 86400000,
                                DATEADD(day, CAST (LastLogin AS BIGINT) / CAST(864000000000 AS BIGINT) - 109207, 0)) END 
            , Type = CASE WHEN flags  & 512 = 512 THEN 'user' 
                        WHEN flags IS NULL THEN 'contact' 
                        WHEN flags & 4096 = 4096 THEN 'computer'
                        WHEN flags & 532480 = 532480 THEN 'computer (DC)' END
    FROM #ADData
    ORDER BY Login
    
    DROP TABLE #ADData
    


    1. Magicbricksは大量のトラフィックをサポートするためにMariaDBに移行します

    2. Mysqlは特定のテーブルの最後のIDを取得します

    3. MySQLの全文検索の前に*(アスタリスク)を付ける

    4. ビット単位のグループ機能を実行することは可能ですか?