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

リンクサーバーエラーのトラップ

    SQLServerはTRY CATCHを提供します アプリケーションが問題を認識し、問題を処理するための適切なコードを実行できるようにするメカニズム。例:

    BEGIN TRY
       <some code>
    END TRY
    BEGIN CATCH 
       PRINT 'This is the error: ' + error_message()
    END CATCH
    

    TRYのコード ブロックが最初に実行されます。エラーが発生した場合、実行はCATCHに渡されます ブロック。

    TRY CATCHを使用する場合、エラー処理にはどのような影響がありますか リンクサーバーを使用しますか?この状況では、次のエラーが発生する可能性があります:

    1. ローカルSQLServerインスタンス。
    2. リモートサーバーとの接続を容易にするために使用されるSQLServerインターフェイス。
    3. リモートサーバーをSQLServerにアクセスできるようにするために使用されるインターフェイス。

    この設定例では、Salesforce.comサーバーをリモートサーバーとして使用します。このリモートサーバータイプの場合、インターフェイス2。 は、ODBCドライバーおよびインターフェイス3用のMicrosoftOLEDBプロバイダーです。 EasysoftのSalesforce.comODBCドライバーです。

    次のエラーは、SQLServerでローカルに発生します。 SALESFORCEという名前のリンクサーバー まだ作成されていないため、SQL Serverはそれを見つけることができません:

    BEGIN TRY
        EXEC('SELECT * FROM OPENQUERY(SALESFORCE, ''SELECT * FROM LEASE'')')
    END TRY
    BEGIN CATCH 
        PRINT 'This is the error: ' + error_message()
    END CATCH
    
    This is the error: Could not find server 'SALESFORCE' in sys.servers. Verify that
    the correct server name was specified. If necessary, execute the stored procedure
    sp_addlinkedserver to add the server to sys.servers.
    

    次のエラーは、Microsoft OLE DB Provider forODBCDriversレイヤーで発生します。 SALESFORCEという名前のリンクサーバー ターゲットSalesforce.comサーバーの接続の詳細を含むODBCデータソースを参照します。ただし、SQL Serverは64ビットですが、ODBCデータソースは32ビットのODBCアドミニストレータで設定されています。 「アーキテクチャの不一致」エラーで接続が失敗する

    OLE DB provider "MSDASQL" for linked server "SALESFORCE" returned message
    "[Microsoft][ODBC Driver Manager] The specified DSN contains an architecture
    mismatch between the Driver and Application".
    This is the error: Cannot initialize the data source object of OLE DB provider
    "MSDASQL" for linked server "SALESFORCE".
    

    SQLServerによるOLEDBエラーの解釈が、CATCHによって検出されていることに注意してください。 ブロック。 OLEDBレイヤーからの「生の」エラーにはありません。

    この最後のエラーは、Salesforce.comへの接続に使用されるODBCレイヤーで発生します。選択クエリは、まだ有効化および設定されていないカスタムSalesforce.comオブジェクト( "LEASE")を参照します。 「[EasysoftODBC]ベーステーブルまたはビューのLEASEが見つかりません」は、ODBCドライバーからのエラーです。これは、Microsoft OLE DB ProviderforODBCドライバーに渡されて表示されます。前の例のように、このメッセージはトラップ可能ではなく、SQLServerによるメッセージの解釈はトラップ可能です。

    OLE DB provider "MSDASQL" for linked server "SALESFORCE" returned message
    "[Easysoft ODBC]Base table or view LEASE not found".
    This is the error: An error occurred while preparing the query
    "SELECT * FROM LEASE" for execution against OLE DB provider "MSDASQL" for linked
    server "SALESFORCE".
    

    リンクサーバーがある場合とない場合の両方でのSQLServerエラー処理の詳細については、以下を参照してください。

    http://www.sommarskog.se/error_handling/Part1.html


    1. SQLサーバーでyes/noブールフィールドをどのように作成しますか?

    2. 要素の順序を無視して、配列が等しいかどうかを比較します

    3. SQL Serverで無効になっているすべての外部キー制約を返す方法(T-SQLの例)

    4. Windows認証を使用したクロスドメインSQLServerログイン