偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

一篇關(guān)于SQL中的動(dòng)態(tài)SQL

開發(fā) 前端
靜態(tài) SQL 語句一般用于嵌入式 SQL 應(yīng)用中,在程序運(yùn)行前,SQL 語句必須是確定的,例如 SQL 語句中涉及的列名和表名必須是存在的。靜態(tài) SQL 語句的編譯是在應(yīng)用程序運(yùn)行前進(jìn)行的,編譯的結(jié)果會(huì)存儲(chǔ)在數(shù)據(jù)庫內(nèi)部。

[[419849]]

在介紹動(dòng)態(tài)SQL前我們先看看什么是靜態(tài)SQL

靜態(tài)SQL

靜態(tài) SQL 語句一般用于嵌入式 SQL 應(yīng)用中,在程序運(yùn)行前,SQL 語句必須是確定的,例如 SQL 語句中涉及的列名和表名必須是存在的。靜態(tài) SQL 語句的編譯是在應(yīng)用程序運(yùn)行前進(jìn)行的,編譯的結(jié)果會(huì)存儲(chǔ)在數(shù)據(jù)庫內(nèi)部。而后程序運(yùn)行時(shí),數(shù)據(jù)庫將直接執(zhí)行編譯好的 SQL 語句,降低運(yùn)行時(shí)的開銷。

動(dòng)態(tài)SQL

動(dòng)態(tài) SQL 語句是在應(yīng)用程序運(yùn)行時(shí)被編譯和執(zhí)行的,例如,使用 DB2 的交互式工具 CLP 訪問數(shù)據(jù)庫時(shí),用戶輸入的 SQL 語句是不確定的,因此 SQL 語句只能被動(dòng)態(tài)地編譯。動(dòng)態(tài) SQL 的應(yīng)用較多,常見的 CLI 和 JDBC 應(yīng)用程序都使用動(dòng)態(tài) SQL。

動(dòng)態(tài)SQL作用

  • 自動(dòng)化管理任務(wù)。例如:對(duì)于數(shù)據(jù)庫實(shí)例中的每個(gè)數(shù)據(jù)庫,查詢其元數(shù)據(jù),為其執(zhí)行BACKUP DATABASE語句。
  • 改善特定任務(wù)的性能。例如,構(gòu)造參數(shù)化的特定查詢,以重用以前緩存過的執(zhí)行計(jì)劃。
  • 對(duì)實(shí)際數(shù)據(jù)進(jìn)行查詢的基礎(chǔ)上,構(gòu)造代碼元素。例如,當(dāng)事先不知道再PIVOT運(yùn)算符的IN子句中應(yīng)該出現(xiàn)哪些元素時(shí),動(dòng)態(tài)構(gòu)造PIVOT查詢。

動(dòng)態(tài)SQL執(zhí)行方法

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

EXEC命令執(zhí)行

語法

  • EXECUTE (SQL語句)

注:EXECUTE 命令有兩個(gè)用途,一個(gè)是用來執(zhí)行存儲(chǔ)過程,另一個(gè)是執(zhí)行動(dòng)態(tài)SQL

不帶參數(shù)示例

在變量@SQL中保存了一個(gè)字符串,該字符串中包含一條查詢語句,再用EXEC調(diào)用保存在變量中的批處理代碼,我們可以這樣寫SQL:

  1. EXEC ('SELECT * FROM Customers'

結(jié)果如下:

與我們直接執(zhí)行SELECT * FROM Customers一樣。

帶參數(shù)示例

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

  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) 

結(jié)果如下:

SP_EXECUTERSQL執(zhí)行

語法

EXEC SP_EXECUTERSQL 參數(shù)1,參數(shù)2,參數(shù)3

注意:SP_EXECUTERSQL是繼EXEC后另一種執(zhí)行動(dòng)態(tài)SQL的方法。使用這個(gè)存儲(chǔ)過程更加安全和靈活,因?yàn)樗С州斎牒洼敵鰠?shù)。注意的是,與EXEC不同的是,SP_EXECUTERSQL只支持使用Unicode字符串作為其輸入的批處理代碼。

示例

構(gòu)造了一個(gè)對(duì)Customers表進(jìn)行查詢的批處理代碼,在其查詢過濾條件中使用一個(gè)輸入?yún)?shù)@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; 

結(jié)果如下:

代碼中將輸入?yún)?shù)取值指定為1,但即使采用不同的值在運(yùn)行這段代碼,代碼字符串仍然保存相同。這樣就可以增加重用以前緩存過的執(zhí)行計(jì)劃的機(jī)會(huì)。

總結(jié) 

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

 

責(zé)任編輯:武曉燕 來源: SQL數(shù)據(jù)庫開發(fā)
相關(guān)推薦

2021-08-12 07:49:24

SQL遞歸用法

2023-02-28 23:04:15

2021-09-15 19:05:16

數(shù)據(jù)開源項(xiàng)目

2021-10-11 11:08:33

HDFS快照系統(tǒng)

2017-12-17 20:17:23

NoSQLSQL數(shù)據(jù)

2018-08-13 09:20:21

NoSQLSQL數(shù)據(jù)

2020-03-09 17:28:51

NoSQLMongoDB數(shù)據(jù)庫

2011-06-21 09:14:01

Oracle查詢

2010-08-05 09:07:24

2010-11-12 13:08:36

動(dòng)態(tài)sql語句

2021-05-14 16:34:12

Semaphore原理

2021-09-05 07:55:36

Lsm核心實(shí)現(xiàn)

2022-05-08 19:58:10

JSONPJavaScript

2022-03-02 11:37:57

參數(shù)性能調(diào)優(yōu)

2021-07-12 10:36:36

Blazor組件入門

2022-11-08 10:52:25

Flowable節(jié)點(diǎn)表單

2022-04-02 09:38:00

CSS3flex布局方式

2021-09-06 06:31:40

理解動(dòng)態(tài)規(guī)劃

2021-09-08 09:22:34

SentryCLIOS

2021-04-18 18:03:06

工作樹遠(yuǎn)程版本
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)