<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SQL中的動態(tài)SQL

          共 2079字,需瀏覽 5分鐘

           ·

          2021-08-29 01:49

          點擊關(guān)注上方“SQL數(shù)據(jù)庫開發(fā)”,

          設(shè)為“置頂或星標”,第一時間送達干貨

          SQL專欄

          SQL基礎(chǔ)知識第二版
          SQL高級知識第二版

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

          靜態(tài)SQL

          靜態(tài) SQL 語句一般用于嵌入式 SQL 應用中,在程序運行前,SQL 語句必須是確定的,例如 SQL 語句中涉及的列名和表名必須是存在的。靜態(tài) SQL 語句的編譯是在應用程序運行前進行的,編譯的結(jié)果會存儲在數(shù)據(jù)庫內(nèi)部。而后程序運行時,數(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語句。

          • 改善特定任務的性能。例如,構(gòu)造參數(shù)化的特定查詢,以重用以前緩存過的執(zhí)行計劃。

          • 對實際數(shù)據(jù)進行查詢的基礎(chǔ)上,構(gòu)造代碼元素。例如,當事先不知道再PIVOT運算符的IN子句中應該出現(xiàn)哪些元素時,動態(tài)構(gòu)造PIVOT查詢。



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

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


          EXEC命令執(zhí)行

          語法

          EXECUTE (SQL語句)

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


          不帶參數(shù)示例

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

          EXEC ('SELECT * FROM Customers')


          結(jié)果如下:

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


          帶參數(shù)示例

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

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


          結(jié)果如下:


          SP_EXECUTERSQL執(zhí)行

          語法

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


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



          示例

          構(gòu)造了一個對Customers表進行查詢的批處理代碼,在其查詢過濾條件中使用一個輸入?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é)果如下:

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


          總結(jié)

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


          最后給大家分享我寫的SQL兩件套:《SQL基礎(chǔ)知識第二版》《SQL高級知識第二版》的PDF電子版。里面有各個語法的解釋、大量的實例講解和批注等等,非常通俗易懂,方便大家跟著一起來實操。

          有需要的讀者可以下載學習,在下面的公眾號「數(shù)據(jù)前線」(非本號)后臺回復關(guān)鍵字:SQL,就行
          數(shù)據(jù)前線


          后臺回復關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨

          后臺回復關(guān)鍵字:進群,帶你進入高手如云的交流群。


          推薦閱讀
          瀏覽 44
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人无码激情视频 | av天堂导航 | 成人性爱免费看 | 国产精品鸡巴 | 女人高潮视频网站 |