分享方式:


陳述式參數

參數是 SQL 語句中的變數。 例如,假設 [組件] 資料表擁有名為 [組件識別碼]、[描述] 與 [定價] 的資料行。 若要新增不含參數的元件,則需要建構 SQL 語句,例如:

INSERT INTO Parts (PartID, Description, Price) VALUES (2100, 'Drive shaft', 50.00)  

儘管此陳述式會插入新順序,但對於訂單輸入應用程式而言,這不是很好的解決方案,因為要插入的值無法在應用程式硬式編碼。 替代方案是利用要插入的值,在執行階段間建構 SQL 陳述式。 不過,這也不是很好的解決方案,因為在執行階段建構陳述式的方式相當複雜。 最佳解決方案是用問號 (?) 或參數標記取代 VALUES 子句的元素:

INSERT INTO Parts (PartID, Description, Price) VALUES (?, ?, ?)  

然後會將參數標記繫結到應用程式變數。 若要插入新資料列,應用程式僅需設定變數值,然後執行陳述式。 然後驅動程式會擷取目前的變數值,再將其傳送給資料來源。 若會多次執行此陳述式,應用程式可預備此陳述式,讓流程更有效率。

剛才顯示的陳述式可能在訂單輸入應用程式中進行硬式編碼,以便插入新資料列。 不過,參數標記不限於垂直應用程式。 對於任何應用程式,可避免在文字之間進行轉換,進而簡化在執行階段建構 SQL 陳述式的困難。 例如,剛才顯示的組件識別碼很可能以整數形式儲存在應用程式。 如果 SQL 陳述式在建構時無參數標記,則應用程式必須將組件識別碼轉換為文字,而資料來源必須將其轉換回整數。 應用程式可利用參數標記,以整數形式將組件識別碼傳送至驅動程式,這通常能以整數形式傳送至資料來源。 這會儲存兩次轉換。 對於長數據值而言,這非常重要,因為這類值的文字形式經常超過 SQL 語句的允許長度。

參數僅在 SQL 陳述式的部分位置才有效。 例如,選取清單不允許參數 (SELECT 陳述式所傳回的資料行清單),也不允許其做為二進位運算子的兩個運算元,例如等號 (=),因為無法判斷參數類型。 一般而言,參數僅在資料操作語言 (DML) 陳述式內才會有效,在資料定義語言 (DDL) 陳述式內則無效。 如需進一步資訊,請參閱附錄 C:SQL 語法的參數標記

當 SQL 陳述式叫用程序時,可使用具名參數。 具名參數會以其名稱來識別,而非以其在 SQL 陳述式的位置來識別。 可透過呼叫 SQLBindParameter 來繫結,但參數是由 IPD (實作參數描述項) 的 SQL_DESC_NAME 欄位所識別,而非由 SQLBindParameterParameterNumber 引數所識別。 也可藉由呼叫 SQLSetDescFieldSQLSetDescRec來繫結。 如需具名參數的進一步資訊,請參閱本節稍後的依名稱繫結參數 (具名參數)。 如需描述項的詳細資訊,請參閱描述項

此章節包含下列主題。