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






