動態表名組裝的sql,還能預編譯嗎?

時間 2025-06-26 22:45:46

1樓:匿名使用者

和正常的一樣使用。

因為那個 preparestatement

用於那種乙個固定 sql, 連續重複執行多次, 只是參櫻氏橡數不一樣的, 有比較好的效果。

也就是核激 第一次分析 sql ,檢查語法是否正確,制定乙個查詢計劃,也就是確定乙個最優的處理方案。

然後去做具體的實際的查詢。

第二次,第三次, 不需要前面的分析,判斷了,直接按照前面的 最優的計劃, 去做查詢了。

對於只執行一次的, 執行起來也是沒有問題脊旁的。

只不過 sql 不同,資料庫伺服器可能需要多次編譯 sql 語句罷了。

mybatis動態傳入表名列名是不是一定要非預編譯的

2樓:嚼蝕聞刻

將查詢回的值放入乙個hashmap中(如果返回的值不止一條就是乙個包含hashmap的list)。這其中的區別在於,如果你指定了返回型別,mybatis將會根據返回型別的實體類來從hashmap中獲取值並set到這個實體類中。如果不指定就預設返回乙個hashmap(list>)。

okay~大概講解到此,說說這次的問題。以前都是指定了實體類,然後寫好sql語句直接套用就可以了。但是現在有個問題,萬一你的物理模型不確定,也即是你的表結構不確定,甚至連表名字都不確定該怎麼辦呢?

我這次遇到了這個問題。我們有個需求,事先定義好了很多資料集的資訊模型,針對這些資訊模型生成物理模型。而我們需要針對這些物理模型進行操作。

而這些資料集一旦更新,資訊模型以及物理模型都要變動,所以事先不可能完全確定物理表結構等等資訊。此時應該怎麼在mybatis中進行處理呢?

這裡在說一下mybatis中乙個屬性:

怎麼把表名作為動態引數查詢sql語句

3樓:網友

動態引數可能就要寫儲存過程了 把表名賦值給變數。

如何動態替換sql中的表名

4樓:網友

把表名稱等設定成引數,再寫在sql語句字串中:

string tablename="yourtablename";

string id="123456";

string sql="select * from "+yourtablename+" where id='"+id+"'";

拼接時注意雙引號、單引號、空格的運用。

靜態的sql 和動態的sql有什麼區別

5樓:文件類共創空間

靜態 sql:靜態 sql 語句一般用於嵌入式 sql 應用中,在程式執行前,sql 語句必須是確定的,例如 sql 語句中涉及的列名和表名必須是存在的。靜態 sql 語句的編譯是在應用程式執行前進行的,編譯的結果會儲存在資料庫內部。

而後程式執行時,資料庫將直接執行編譯好的 sql 語句,降低執行時的開銷。

動態 sql:動態 sql 語句是在應用程式執行時被編譯和執行的,例如,使用 db2 的互動式工具 clp 訪問資料庫時,使用者輸入的 sql 語句是不確定的,因此 sql 語句只能被動態地編譯。動態 sql 的應用較多,常見的 cli 和 jdbc 應用程式都使用動態 sql。

參考資料。

6樓:莘贍

表 1. 靜態 sql 和動態 sql 的比較。

靜態 sql

動態 sql

sql 語句直接嵌入到宿主程式語言,程式需要預編譯處理這些嵌入的 sql 語句。

sql 語句一般作為宿主語言的變數出現。嵌入式動態 sql 應用需要預編譯,非嵌入式 sql 應用則無需預編譯。

sql 語句在程式被編譯時已知,涉及的資料庫物件已存在。

sql 語句在程式被編譯時未知,涉及的資料庫物件可以是執行時才建立的。

sql 語句在程式執行前被編譯。

sql 語句在程式執行時被編譯。

sql 語句的編譯結果在 db2 的目錄 (catalog) 中持久化儲存。

sql 語句的編譯結果快取在資料庫的記憶體裡。

執行時僅讀取目錄 (catalog)

執行時編譯 sql 語句需對目錄 (catalog) 加鎖。

sql 語句的優化是根據編譯時的資料庫統計資訊進行的,不能完全反映執行時的情況。

sql 語句的優化是根執行時的資料庫統計資訊進行的。

對 sql 語句所訪問的資料物件的許可權檢查是在繫結時進行的。

對 sql 語句所訪問的資料物件的許可權檢查是在執行時進行的。

許可權控制的粒度是包(package,一組 sql 語句的編譯結果),使用者僅需要訪問包的許可權。

許可權控制的粒度是 sql 語句,使用者需要具有訪問 sql 語句中每個資料物件的許可權。

如果 sql 語句中的物件被修改,如 ddl 執行,整個包都需要重新繫結。

當 sql 語句中的物件被修改時,僅執行過的語句在下次執行時需要重新編譯。

7樓:悉星河

動態隨時改變 靜態必須事先寫好。

8樓:網友

這上面有比較詳細的解釋。

如何動態替換sql中的表名

9樓:匿名使用者

from 後面直接跟表名 ,不能直接帶函式這些,如果要用 replace 可以使用動態sql 改寫如下。

declare @s nvarchar(1000)set @s ='delete from ' +replace(crm_lnacct_prft_dyn,'_dyn','') +' where date_id='+'''2015'''

execute(@s)

sql如何把表名中包含某字元的表刪除

以下儲存過程實測通過,不過,使用要小心,很危險,因為會刪除一批表!create procedure deletetables str varchar 100 as declare name varchar 100 select name as 請看一下所有刪除的表 from sysobjects w...

關於SQL表的問題,求SQL語句

ms sql server,類似這樣。這個是取物料在銷售和採購兩個表一段時間內都沒有記錄的顯示,你可以根據實際情況修改。select distinct 物料表。from 物料表 a left join select from 銷售明細 where 時間 date b on a.物料號 b.物料號。l...

sql如何使用在函式中使用變數作為表名執行查詢

是不能這樣寫的,用動態語句的話,function好像又不支援,改用儲存過程吧,如下 create procedure proc setbatchid table as nvarchar 100 batchid varchar 11 output asbegin declare sql nvarcha...