ステートメント ハンドルの割り当て
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
アプリケーションでステートメントを実行する前に、ステートメント ハンドルを割り当てる必要があります。 これを行うには、SQLAllocHandle HandleType パラメーターを SQL_HANDLE_STMT に設定し接続ハンドルを指す InputHandle を呼び出します。
ステートメント属性は、ステートメント ハンドルの特徴を表します。 ブックマークやカーソルを使用してサンプル ステートメント属性を取り込み、ステートメントの結果セットと共に使用することができます。 ステートメント属性は SQLSetStmtAttr で設定され、現在の設定は SQLGetStmtAttr を使用して取得されます。 アプリケーションでステートメント属性を設定する必要はありません。すべてのステートメント属性には既定値があり、一部の属性は、ドライバー固有の属性になっています。
複数の ODBC ステートメント オプションと接続オプションを使用する場合は、注意が必要です。 fOptionをSQL_ATTR_LOGIN_TIMEOUTに設定したSQLSetConnectAttrを呼び出すと、アプリケーションが接続の確立を待機している間にタイムアウトを待機する時間が制御されます (0 は無限待機を指定します)。 応答時間が遅いサイトでは、この値を高く設定して、接続の完了までに十分な時間を与えることができます。 ただしこの間隔は、ドライバーが接続できない場合に、妥当な時間内にユーザーに応答できる程度に低く抑える必要があります。
fOptionをSQL_ATTR_QUERY_TIMEOUTに設定してsqlSetStmtAttrを呼び出すと、サーバーとユーザーが実行時間の長いクエリから保護するのに役立つクエリタイムアウト間隔が設定されます。
fOptionをSQL_ATTR_MAX_LENGTHに設定SQLSetStmtAttrを呼び出すと、個々のステートメントで取得できるtextおよびimageデータの量が制限されます。 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 ステートメントを別のバッチで送信する必要があります。その結果、サーバーに対する追加のラウンドトリップが自動的に生成されます。