共用方式為


簡單參數化

在 SQL Server 2005 中,於 Transact-SQL 陳述式中使用參數或參數標記,可以增加關聯式引擎將新 SQL 陳述式與先前編譯之現有執行計劃配對的能力。

ms186219.security(zh-tw,SQL.90).gif安全性注意事項:
使用參數或參數標記來保存使用者鍵入的值,會比將值串連到字串中,再使用資料存取 API 方法 (EXECUTE 陳述式) 或 sp_executesql 預存程序來執行該字串,還要來得安全。

如果未使用參數而執行 SQL 陳述式,SQL Server 2005 會從內部參數化此陳述式,以增加它與現有執行計劃相符的可能性。此處理序即稱為簡單參數化。在 SQL Server 2000 中,此處理序就是指自動參數化。

請參考這個陳述式:

SELECT * FROM AdventureWorks.Production.Product 
WHERE ProductSubcategoryID = 1

在陳述式尾端的數值 1,可以指定成參數。關聯式引擎會建立這個批次的執行計劃,如同已指定參數來取代值 1。由於此簡單參數化,SQL Server 2005 認為下列兩個陳述式所產生的實際上是相同的執行計劃,因此會在第二個陳述式中重複使用第一個計劃:

SELECT * FROM AdventureWorks.Production.Product 
WHERE ProductSubcategoryID = 1

SELECT * FROM AdventureWorks.Production.Product 
WHERE ProductSubcategoryID = 4

在處理複雜的 SQL 陳述式時,關聯式引擎可能會無法判斷哪個運算式可以參數化。若要增加關聯式引擎將複雜的 SQL 陳述式與現有、未使用之執行計劃配對的能力,請使用 sp_executesql 或參數標記明確指定參數。如需詳細資訊,請參閱<參數和執行計劃的重複使用>。

ms186219.note(zh-tw,SQL.90).gif附註:
當 +、-、*、/ 或 % 等算術運算子用來將 int、smallint、tinyint 或 bigint 常數值隱含或明確轉換為浮點數、實數、十進位數或數值資料類型時,SQL Server 會套用特定的規則來計算運算式結果的類型與有效位數。不過,這些規則會隨著查詢是否參數化而有所不同。因此,在某些情況下,查詢中類似的運算式可能會產生不同的結果。如需詳細資訊,請參閱<int、bigint、smallint 和 tinyint (Transact-SQL)>。

在簡單參數化的預設行為下,SQL Server 可將較小的查詢類別參數化。不過,您可以指定資料庫中所有的查詢在特定限制下進行參數化,只要將 ALTER DATABASE 命令的 PARAMETERIZATION 選項設為 FORCED 即可。這麼做可降低查詢編譯的頻率,進而改善經歷大量並行查詢的資料庫效能。如需詳細資訊,請參閱<強制參數化>。

此外,您可以指定單一查詢,以及任何其他語法相同但唯有參數值不同的查詢,使其進行參數化。如需詳細資訊,請參閱<使用計劃指南指定查詢參數化行為>。

請參閱

參考

SQL Server 的 SQL Statistics 物件

說明及資訊

取得 SQL Server 2005 協助