當前位置:首頁 » 編程語言 » sql動態條件

sql動態條件

發布時間: 2023-09-16 14:07:26

⑴ 動態sql的使用

在介紹動態SQL前我們先看看什麼是靜態SQL

靜態SQL

靜態 SQL 語句一般用於嵌入式 SQL 應用中,在程序運行前,SQL 語句必須是確定的,例如 SQL 語句中涉及的列名和表名必須是存在的。靜態 SQL 語句的編譯是在應用程序運行前進行的,編譯的結果會存儲資料庫內部。而後程序運行時,資料庫將直接執行編譯好的 SQL 語句,降低運行時的開銷。

動態SQL

動態 SQL 語句是在應用程序運行時被編譯和執行的,例如,使用 DB2 的互動式工具 CLP 訪問資料庫時,用戶輸入的 SQL 語句是不確定的,因此 SQL 語句只能被動態地編譯。動態 SQL 的應用較多,常見的 CLI 和 JDBC 應用程序都使用動態 SQL。

動態SQL作用

動態SQL執行方法

使用EXEC(EXECUTE的縮寫)命令和使用SP_EXECUTERSQL。

EXEC命令執行

語法

註:EXECUTE 命令有兩個用途,一個是用來執行存儲過程,另一個是執行動態SQL

不帶參數示例

在變數@SQL中保存了一個字元串,該字元串中包含一條查詢語句,再用EXEC調用保存在變數中的批處理代碼,我們可以這樣寫SQL:

EXEC ('SELECT * FROM Customers')

結果如下:

與我們直接執行SELECT * FROM Customers一樣。

帶參數示例

還是上面的示例,我們換一種寫法

DECLARE @SQL AS VARCHAR(100);

DECLARE @Column AS VARCHAR(20);

SET @Column = '姓名'

SET @SQL = 'SELECT ' + @Column + ' FROM Customers'

EXEC (@SQL)

結果如下:

SP_EXECUTERSQL執行

語法

注意:SP_EXECUTERSQL是繼EXEC後另一種執行動態SQL的方法。使用這個存儲過程更加安全和靈活,因為它支持輸入和輸出參數。注意的是,與EXEC不同的是,SP_EXECUTERSQL只支持使用Unicode字元串作為其輸入的批處理代碼。

示例

構造了一個對Customers表進行查詢的批處理代碼,在其查詢過濾條件中使用一個輸入參數@CusID

DECLARE @SQL AS NVARCHAR(100);

SET @SQL=N'SELECT * FROM Customers

WHERE 客戶ID=@CusID;'

EXEC SP_EXECUTESQL

@STMT=@SQL,

@PARMS=N'@CusID AS INT',

@CusID=1;

結果如下:

代碼中將輸入參數取值指定為1,但即使採用不同的值在運行這段代碼,代碼字元串仍然保存相同。這樣就可以增加重用以前緩存過的執行計劃的機會

⑵ 動態實現sql查詢條件替換

<select id="queryEmp" resultType="cn.test.entity.Emp">
select * from emp where 1=1
<if test="deptNo!=null">
and deptno=#{deptNO}
</if>
<if test="deptName!=null">
and deptno=#{deptName}
</if>
</select>

註:<if test="deptNo!=null">中 的deptNo是指實體類中的屬性或欄位;
choose:
<select id="queryEmp" resultType="cn.test.entity.Emp">
select * from emp where 1=1
<choose>
<when test="deptNo!=null">
and deptno=#{deptNo}
</when>
<when test="deptName!=null">
and deptname=#{deptName}
</when>
<otherwise>
and personnum>#{personNum}
</otherwise>
</choose>
</select>

熱點內容
安卓app緩存 發布:2025-08-17 07:10:28 瀏覽:362
約戰傷害演算法 發布:2025-08-17 07:06:09 瀏覽:922
預算資料庫 發布:2025-08-17 06:49:46 瀏覽:271
舊版本火狐app腳本 發布:2025-08-17 06:49:44 瀏覽:558
渲染高清3d大圖要什麼配置 發布:2025-08-17 06:49:03 瀏覽:440
bmob存儲圖片 發布:2025-08-17 06:35:30 瀏覽:473
CTC資料庫伺服器如何連接 發布:2025-08-17 06:19:36 瀏覽:545
哪吒汽車upro選哪個配置 發布:2025-08-17 05:56:01 瀏覽:587
思科模擬路由如何重新配置 發布:2025-08-17 05:51:02 瀏覽:430
源碼游 發布:2025-08-17 05:44:49 瀏覽:859