在介紹動態SQL前我們先看看什么是靜態SQL
靜態SQL
靜態 SQL 語句一般用于嵌入式 SQL 應用中,在程序運行前,SQL 語句必須是確定的,例如 SQL 語句中涉及的列名和表名必須是存在的。靜態 SQL 語句的編譯是在應用程序運行前進行的,編譯的結果會存儲在數據庫內部。而后程序運行時,數據庫將直接執行編譯好的 SQL 語句,降低運行時的開銷。
動態SQL
動態 SQL 語句是在應用程序運行時被編譯和執行的,例如,使用 DB2 的交互式工具 CLP 訪問數據庫時,用戶輸入的 SQL 語句是不確定的,因此 SQL 語句只能被動態地編譯。動態 SQL 的應用較多,常見的 CLI 和 JDBC 應用程序都使用動態 SQL。
動態SQL作用
- 自動化管理任務。例如:對于數據庫實例中的每個數據庫,查詢其元數據,為其執行BACKUP DATABASE語句。
- 改善特定任務的性能。例如,構造參數化的特定查詢,以重用以前緩存過的執行計劃。
- 對實際數據進行查詢的基礎上,構造代碼元素。例如,當事先不知道再PIVOT運算符的IN子句中應該出現哪些元素時,動態構造PIVOT查詢。
動態SQL執行方法
使用EXEC(EXECUTE的縮寫)命令和使用SP_EXECUTERSQL。
EXEC命令執行
語法
EXECUTE (SQL語句)
注:EXECUTE 命令有兩個用途,一個是用來執行存儲過程,另一個是執行動態SQL
不帶參數示例
在變量@SQL中保存了一個字符串,該字符串中包含一條查詢語句,再用EXEC調用保存在變量中的批處理代碼,我們可以這樣寫SQL:
EXEC ('SELECT * FROM Customers')
結果如下: