ステートメント ハンドルの割り当て

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

アプリケーションでステートメントを実行する前に、ステートメント ハンドルを割り当てる必要があります。 これは、HandleType パラメーターが SQL_HANDLE_STMT に設定され、InputHandle が接続ハンドルを指す SQLAllocHandle を呼び出すことによって行われます。

ステートメント属性は、ステートメント ハンドルの特徴を表します。 ブックマークやカーソルを使用してサンプル ステートメント属性を取り込み、ステートメントの結果セットと共に使用することができます。 ステートメント属性は SQLSetStmtAttr で設定され、現在の設定は SQLGetStmtAttr を使用して取得されます。 アプリケーションでステートメント属性を設定する必要はありません。すべてのステートメント属性には既定値があり、一部の属性は、ドライバー固有の属性になっています。

複数の ODBC ステートメント オプションと接続オプションを使用する場合は、注意が必要です。 fOption を SQL_ATTR_LOGIN_TIMEOUT に設定して SQLSetConnectAttr を呼び出すと、接続の確立を待機している間にアプリケーションが接続のタイムアウトを待機する時間が制御されます (0 は無限待機を指定します)。 応答時間が遅いサイトでは、この値を高く設定して、接続の完了までに十分な時間を与えることができます。 ただしこの間隔は、ドライバーが接続できない場合に、妥当な時間内にユーザーに応答できる程度に低く抑える必要があります。

fOption を SQL_ATTR_QUERY_TIMEOUT に設定して SQLSetStmtAttr を呼び出すと、実行時間の長いクエリからサーバーとユーザーを保護するために、クエリのタイムアウト間隔が設定されます。

fOption を SQL_ATTR_MAX_LENGTH に設定して SQLSetStmtAttr を呼び出すと、個々のステートメントで取得できるテキストデータとイメージ データの量が制限されます。 fOption を SQL_ATTR_MAX_ROWS に設定して SQLSetStmtAttr を呼び出すと、アプリケーションで必要な場合は最初の n 行に行セットも制限されます。 SQL_ATTR_MAX_ROWS を設定すると、ドライバーがサーバーに対して SET ROWCOUNT ステートメントを実行することになります。 これは、トリガーや更新プログラムを含むすべての Microsoft SQL Server ステートメントに影響します。

上記のオプションを設定するときは注意が必要です。 SQL_ATTR_MAX_LENGTH と SQL_ATTR_MAX_ROWS の場合、接続ハンドルのすべてのステートメント ハンドルが同じ設定になるようにすることをお勧めします。 ドライバーが、あるステートメント ハンドルから、これらのオプションに異なる値を持つ別のステートメント ハンドルに切り替える場合、適切な SET TEXTSIZE ステートメントと SET ROWCOUNT ステートメントを生成して、設定を変更する必要があります。 ユーザー SQL ステートメントには、バッチ内では先頭に含めなければならないステートメントを含めることができるので、ドライバーはユーザー SQL ステートメントと同じバッチ内にこれらのステートメントを配置することはできません。 ドライバーは SET TEXTSIZE ステートメントと SET ROWCOUNT ステートメントを別のバッチで送信する必要があります。その結果、サーバーに対する追加のラウンドトリップが自動的に生成されます。

参照

クエリの実行 (ODBC)