SQLPrepare
SQL Server Native Client ODBC 驅動程式會從備妥的 SQL 陳述式建立暫存預存程序。預存程序是多次執行陳述式的一種有效率的方式,但是建立預存程序要比執行簡單陳述式耗費更多成本。一般來說,如果應用程式將會提交 SQL 陳述式三次以上,請考慮使用 SQLPrepare 和 SQLExecute。
[!附註]
SQL Server 支援 ODBC 的準備/執行模型。SQLPrepare/SQLExecute 行為的討論只適用於 7.0 版以前的 SQL Server。
SQLPrepare 所建立的暫存預存程序命名為 **#odbc#**useridentifier,其中 useridentifier 是與識別此程序的數字 (最多八個) 串連在一起的使用者名稱 (最多六個字元)。
如果所有參數值都已經繫結,或是 SQL 陳述式未包含參數,SQLPrepare 就會建立暫存預存程序。如果在呼叫 SQLPrepare 時未繫結所有參數,SQLExecute 會建立此程序。
SQLPrepare 比起 SQLExecute 可以更有效率地建立預存程序,我們建議您在呼叫 SQLPrepare 之前先使用 SQLBindParameter 繫結參數變數。
如果用來產生暫存預存程序的 CREATE PROCEDURE 陳述式傳回錯誤,SQLPrepare 或 SQLExecute 會將此陳述式提交給 SQL Server,並啟用 SET NOEXEC 或 SET PARSEONLY 選項 (根據陳述式類型而定)。SQL Server 會檢查此陳述式的語法,並傳回任何錯誤。
SQLExecute 可以傳回任何 ODBC SQLSTATE 以及可由 SQLPrepare 傳回的任何 SQL Server 錯誤。
如果已備妥之陳述式上的 SQLBindParameter 呼叫中改變了 InputOutputType、ParameterType、ColumnSize 或 DecimalDigits 值,則 SQL Server Native Client ODBC 驅動程式會建立新的暫存預存程序。當繫結的參數指向用戶端記憶體中的新緩衝區、用戶端記憶體的長度已改變,或是此長度的指標或參數的指標值已經改變時,將不會建立新的暫存預存程序。
如果基於任何理由導致連接無法建立預存程序 (例如因為缺少權限),SQL Server Native Client ODBC 驅動程式不會使用預存程序,而是在每次呼叫 SQLExecute 時提交 SQL 陳述式。
根據預設,SQL Server Native Client ODBC 驅動程式會在連接中斷時 (針對此連接呼叫 SQLDisconnect) 卸除暫存預存程序。如果預期此連接將會無限期地維持開啟狀態,這可能會發生問題。可以使用此驅動程式特有的連接選項 SQL_USE_PROCEDURE_FOR_PREPARE 來變更此預設行為。
[!附註]
如果已經執行 SET NOCOUNT ON,內嵌在預存程序中的多個陳述式將不會如預期般建立多個結果集。此驅動程式會忽略預存程序內由 SQL 陳述式所產生的資料列計數。