网站黄色在线观看视频,男人和女人操逼有免费的视频吗2018高清,91熟女丨老女人丨高潮丰满,丝袜高潮流白浆潮喷在线播放

聯(lián)系我們

400-002-9968

售前咨詢

售后服務(wù)

注冊(cè) 登錄

博客 > SQL知識(shí):動(dòng)態(tài)SQL定義、作用以及執(zhí)行方法

SQL知識(shí):動(dòng)態(tài)SQL定義、作用以及執(zhí)行方法

  • 標(biāo)簽:
  • SQL
  • 動(dòng)態(tài)SQL
  • 靜態(tài)SQL

瀏覽量:1568次評(píng)論:0次

作者:銳成網(wǎng)絡(luò)整理時(shí)間:2024-06-18 14:10:15

動(dòng)態(tài)SQL在CLI 和 JDBC 應(yīng)用程序中廣泛應(yīng)用,是了解SQL需要掌握的重要知識(shí),那么什么是動(dòng)態(tài)SQL?動(dòng)態(tài)SQL作用是什么?動(dòng)態(tài)SQL如何執(zhí)行呢?本文將深入探討動(dòng)態(tài)SQL的定義、作用以及執(zhí)行方法

SQL知識(shí):動(dòng)態(tài)SQL定義、作用以及執(zhí)行方法

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

一、靜態(tài)SQL

靜態(tài) SQL 語(yǔ)句一般用于嵌入式 SQL 應(yīng)用中,在程序運(yùn)行前,SQL 語(yǔ)句必須是確定的,例如 SQL 語(yǔ)句中涉及的列名和表名必須是存在的。

靜態(tài) SQL 語(yǔ)句的編譯是在應(yīng)用程序運(yùn)行前進(jìn)行的,編譯的結(jié)果會(huì)存儲(chǔ)在數(shù)據(jù)庫(kù)內(nèi)部。而后程序運(yùn)行時(shí),數(shù)據(jù)庫(kù)將直接執(zhí)行編譯好的 SQL 語(yǔ)句,降低運(yùn)行時(shí)的開銷。

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

動(dòng)態(tài) SQL 語(yǔ)句是在應(yīng)用程序運(yùn)行時(shí)被編譯和執(zhí)行的,例如,使用 DB2 的交互式工具 CLP 訪問數(shù)據(jù)庫(kù)時(shí),用戶輸入的 SQL 語(yǔ)句是不確定的,因此 SQL 語(yǔ)句只能被動(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)態(tài)SQL主要有以下3大作用:

  • 自動(dòng)化管理任務(wù)。例如:對(duì)于數(shù)據(jù)庫(kù)實(shí)例中的每個(gè)數(shù)據(jù)庫(kù),查詢其元數(shù)據(jù),為其執(zhí)行BACKUP DATABASE語(yǔ)句。
  • 改善特定任務(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í)行

1、語(yǔ)法

EXECUTE (SQL語(yǔ)句)

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

2、不帶參數(shù)示例

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

EXEC ('SELECT * FROM Customers')

結(jié)果如下:

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

3、帶參數(shù)示例

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

DECLARE @SQL AS VARCHAR(100);
DECLARE @Column AS VARCHAR(20);
SET @Column = '姓名'
SET @SQL = 'SELECT ' + @Column + ' FROM Customers';
EXEC (@SQL)

結(jié)果如下:

SQL知識(shí):動(dòng)態(tài)SQL定義、作用以及執(zhí)行方法

SP_EXECUTERSQL執(zhí)行

1、語(yǔ)法

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字符串作為其輸入的批處理代碼。

2、示例

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

結(jié)果如下:

SQL知識(shí):動(dòng)態(tài)SQL定義、作用以及執(zhí)行方法

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

重要聲明:本文來(lái)自SQL數(shù)據(jù)庫(kù)開發(fā),經(jīng)授權(quán)轉(zhuǎn)載,版權(quán)歸原作者所有,不代表銳成觀點(diǎn),轉(zhuǎn)載的目的在于傳遞更多知識(shí)和信息。

我的評(píng)論

還未登錄?點(diǎn)擊登錄

微信掃碼溝通
微信掃碼溝通

微信掃碼溝通

AI
return head