成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一篇關于SQL中的動態SQL

開發 前端
靜態 SQL 語句一般用于嵌入式 SQL 應用中,在程序運行前,SQL 語句必須是確定的,例如 SQL 語句中涉及的列名和表名必須是存在的。靜態 SQL 語句的編譯是在應用程序運行前進行的,編譯的結果會存儲在數據庫內部。

[[419849]]

在介紹動態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:

  1. EXEC ('SELECT * FROM Customers'

結果如下:

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

帶參數示例

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

  1. DECLARE @SQL AS VARCHAR(100); 
  2. DECLARE @Column AS VARCHAR(20); 
  3. SET @Column = '姓名' 
  4. SET @SQL = 'SELECT ' + @Column + ' FROM Customers'
  5. EXEC (@SQL) 

結果如下:

SP_EXECUTERSQL執行

語法

EXEC SP_EXECUTERSQL 參數1,參數2,參數3

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

示例

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

  1. DECLARE @SQL AS NVARCHAR(100); 
  2. SET @SQL=N'SELECT * FROM Customers 
  3. WHERE 客戶ID=@CusID;'; 
  4.  
  5. EXEC SP_EXECUTESQL 
  6.     @STMT=@SQL, 
  7.     @PARMS=N'@CusID AS INT'
  8.     @CusID=1; 

結果如下:

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

總結 

動態SQL在日常工作中可能接觸的比較少,但是其功能是非常強大的,可以直接嵌套在代碼里進行操作數據,但是也很容易出錯,特別是在進行命令拼接時候要非常仔細。這里只是給大家簡單介紹一下其使用方法,需要深入使用還需要多多研究。

 

責任編輯:武曉燕 來源: SQL數據庫開發
相關推薦

2021-08-12 07:49:24

SQL遞歸用法

2023-02-28 23:04:15

2021-09-15 19:05:16

數據開源項目

2021-10-11 11:08:33

HDFS快照系統

2018-08-13 09:20:21

NoSQLSQL數據

2011-06-21 09:14:01

Oracle查詢

2020-03-09 17:28:51

NoSQLMongoDB數據庫

2017-12-17 20:17:23

NoSQLSQL數據

2010-11-12 13:08:36

動態sql語句

2010-08-05 09:07:24

2022-05-08 19:58:10

JSONPJavaScript

2021-09-05 07:55:36

Lsm核心實現

2021-05-14 16:34:12

Semaphore原理

2022-03-02 11:37:57

參數性能調優

2021-07-12 10:36:36

Blazor組件入門

2022-11-08 10:52:25

Flowable節點表單

2022-04-02 09:38:00

CSS3flex布局方式

2021-09-06 06:31:40

理解動態規劃

2021-09-08 09:22:34

SentryCLIOS

2021-04-18 18:03:06

工作樹遠程版本
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久草网站 | 久久免费精品视频 | 久久99精品久久久久子伦 | 欧美一级片在线看 | 精品丝袜在线 | 亚洲一区二区三区在线播放 | 中文字幕视频在线观看 | 中文字幕欧美一区二区 | 在线视频一区二区三区 | av在线二区 | 91麻豆蜜桃一区二区三区 | 999精品网| 黄色在线免费观看视频 | 国产精品免费一区二区三区四区 | 欧美精品一区二区在线观看 | 日韩精品欧美精品 | 亚洲 中文 欧美 日韩 在线观看 | 男人天堂99 | 国产精品区二区三区日本 | 久久lu | 中文天堂在线一区 | 日韩欧美黄色 | 91婷婷韩国欧美一区二区 | 中文字幕在线观看国产 | 久久国产美女视频 | 99热精品国产 | 911影院| 在线一区 | 精品日韩一区二区 | 日韩在线不卡视频 | 亚洲精品视频在线 | 91精品国产综合久久久久久 | 色爱综合网| 国产黄色在线观看 | 日韩欧美视频免费在线观看 | 中文字幕在线网 | 亚洲欧美综合 | 91视频网| 久久综合久色欧美综合狠狠 | 国产精品自在线 | 中文字幕综合在线 |