Visual COBOL を使用する際、SQL CLR ストアド プロシージャは少なくとも次の 2 つのプロジェクトで構成されています。
- COBOL コードが含まれる 1 つ以上の Visual Studio COBOL ライブラリ プロジェクト
- SQL Server ストアド プロシージャとして実行するために COBOL コードのディプロイに使用する 1 つの SQL CLR .Publish プロジェクト
SQL CLR ストアド プロシージャ内からのルーチンの COBOL 呼び出しを正常に発行するには、次のいずれかを実行します。
- 呼び出し先のルーチンをストアド プロシージャと同じ Visual Studio COBOL ライブラリ プロジェクトに含めてコンパイルします。これにより、そのルーチンがストアド プロシージャのアセンブリの一部として自動的に含められます。リテラルによるすべての CALL がコンパイル時に解決され、すべてのルーチンが 1 つのアセンブリに含められ、data-name によるすべての CALL が正しく実行されるため、この方法を強くお奨めします。
- 呼び出し先のルーチンをストアド プロシージャが含まれるプロジェクトとは異なる Visual Studio COBOL ライブラリ プロジェクトに含めてコンパイルします。
ストアド プロシージャと呼び出し先の COBOL ルーチンに異なるプロジェクトを使用する場合、次の点に注意してください。
- ディプロイを正しく行うには、呼び出し先のルーチンが含まれるすべての Visual Studio COBOL ライブラリ プロジェクトへの参照を追加して SQL CLR .Publish プロジェクトを更新する必要もあります。
- さらに、ストアド プロシージャが含まれるプロジェクトから呼び出し先のルーチンが含まれるプロジェクトへの参照を作成することをお奨めします。これにより、リテラルによるすべての CALL が静的になり、実行時にすべての CALL を正常に解決することができます。
呼び出し先のルーチンが含まれるアセンブリがロードされた場合にのみ、data-name による CALL とリテラルによる CALL (プロジェクト参照なし) が正しく実行されます。次のいずれかの方法を使用して、アセンブリをロードします。
- ストアド プロシージャ コードで、呼び出しを発行する前に対応する PROCEDURE-POINTER を設定することで、呼び出し先のルーチンのプロジェクト アセンブリを事前ロードします。名前に .dll 拡張子を含めないでください。
- 呼び出し先のルーチンのプロジェクト アセンブリの名前が、呼び出し先のルーチンの名前と一致していることを確認します。