參數標記 (Database Engine)
ADO、OLE DB 和以 ODBC 為基礎的資料庫 API 都支援參數標記。參數標記是置於 Transact-SQL 陳述式中輸入或輸出運算式位置的問號 (?)。當執行同一個 Transact-SQL 陳述式多次,並在輸入和輸出運算式中使用不同值時,參數標記允許應用程式最佳化此種狀況。
例如,使用者在應用程式中設定五個不同的股票符號,應用程式必須呼叫預存程序取得每種股票的目前資料。應用程式可以執行下列工作:
準備 Transact-SQL 陳述式:
EXEC GetQuoteProcedure @StockSymbolParameter = ?
將應用程式變數繫結至參數標記 (?)。
執行迴圈:
將下一個股票符號移至受到繫結的變數。
執行陳述式來擷取股票的報價。
參數標記不需對應到預存程序參數。參數標記可用於任何有使用輸入運算式的地方,例如:
UPDATE HumanResources.Employees
SET Title = ?
WHERE EmployeeID = ?
此外,參數標記也可以用來對應預存程序輸出參數和傳回碼。應用程式執行預存程序時,OLE DB 提供者或 ODBC 驅動程式會將輸出參數或傳回碼中的資料值移至繫結參數標記的變數內。
例如,應用程式可以執行下列程序。此預存程序會傳回一個整數傳回碼與字元輸出參數。
準備陳述式:
{? = CALL MyProc (?)}
將第一個參數標記繫結至整數變數,並將第二個標記繫結至字元陣列。
執行此陳述式。
擷取或取消由預存程序傳回的所有結果集。
此時,Microsoft OLE DB Provider for SQL Server 或 SQL Server ODBC 驅動程式將會在繫結變數中放置傳回碼和輸出參數值。Microsoft SQL Server 會傳回它傳回給用戶端之最後封包中的輸出參數和傳回碼值。因此,應用程式必須在存取傳回碼和輸出參數值之前,處理或取消預存程序傳回的所有結果集。
ADO API 發展出另一種執行預存程序的處理過程。ADO 應用程式會執行下列動作:
將 Command 物件類型設定為 adCmdStoredProc。
將命令文字設定與程序名稱相同。
建立一個 Parameters 集合,將所有的參數和傳回碼繫結至應用程式變數。
執行 Command 物件。
參數標記和具有特定資料類型的資料庫物件相關。如果應用程式將參數標記繫結至變數,但是此變數的資料類型與關聯資料庫物件不同,則 OLE DB 提供者或 ODBC 驅動程式必須轉換資料。例如,如果應用程式將整數傳回碼繫結至字元陣列,則 OLE DB 提供者或 ODBC 驅動程式必須將傳回碼整數資料轉換為字元字串。如需支援之資料類型轉換的資訊,請參閱 OLE DB Provider for SQL Server 與 SQL Server ODBC 驅動程式的文件集。