1

openqueryを使用して一時テーブルにデータを設定するストアドプロシージャ(作成していません)があります。問題は、プロシージャ全体を停止するという予期されたエラー(存在しないユーザーのActive Directoryにヒットする)があることです。私が望んでいたのは、エラーをキャッチし、いくつかのデフォルト値を入力して、カーソルを続行できるようにすることです。現在、エラーをキャッチしていますが、procはその時点で停止しています。強制的に続行する方法はありますか?procの一部は次のとおりです。

   BEGIN
        SET @SQL=N'INSERT INTO #AD_Display_Names (GUID, Display_Name) 
        SELECT objectGUID, displayName 
        FROM OPENQUERY(ADSI,''SELECT objectGUID, displayName 
        FROM ''''LDAP://<GUID=' + CONVERT (VARCHAR (MAX), @GUID) + '>'''' 
        WHERE objectCategory = ''''Person'''' AND objectClass = ''''user'''''')'

        BEGIN TRY
            EXEC SP_EXECUTESQL @SQL
        END TRY
        BEGIN CATCH
            SET @SQL=N'INSERT INTO #AD_Display_Names (GUID, Display_Name) 
            VALUES(''00000000-0000-0000-0000-000000000000'', ''Unknown'')'
            EXEC SP_EXECUTESQL @SQL
        END CATCH

        FETCH NEXT FROM [User_Names_Cursor]
        INTO @GUID
    END
4

1 に答える 1

1

このようなことをしてみませんか?

-ここにカーソルがあります

BEGIN
    DECLARE @objectGUID UNIQUEIDENTIFIER
    DECLARE @displayName VARCHAR(100)
    SELECT @objectGUID = objectGUID, @displayName = displayName
    FROM OPENQUERY(ADSI, N'SELECT objectGUID, displayName 
                           FROM ''LDAP://<GUID=' + CONVERT (VARCHAR (MAX), @GUID) + '>''
                           WHERE objectCategory = ''Person'' AND objectClass = ''user'''

    IF(@objectGUID IS NULL)
    BEGIN
        SET @objectGUID = '00000000-0000-0000-0000-000000000000'
        SET @displayName = 'Unknown'
    END

    INSERT INTO #AD_Display_Names (GUID, Display_Name)
    VALUES(@objectGUID, @displayName)

    FETCH NEXT FROM [User_Names_Cursor]                           
    INTO @GUID  
END
于 2012-06-27T16:30:14.640 に答える