sp prepare與語句控制代碼

2021-06-18 00:44:53 字數 2563 閱讀 3967

長久以來一直都在處理別人的產品跟資料庫,使用事件探查器來跟蹤**執**況是我最常用的解析別人產品的方式,不過昨天在搞怡軟產品的時候卻發現這招不好使,事件探查器中根本看不到一句資料庫sql語句,所有的操作全部都用語句控制代碼來做了,看到最多的就是 exec sp_execute 11,1,即便在事件探查器中新增引數sp:stmtstaring,sp:stmtcompleted,也沒有結果,原因是在處理過程中檢測到了password,探查器給替換了文字。真是萬惡,這樣就起到了隱藏**的目的。

有些地方可以查到使用了sp_prepare來預編譯sql語句,之後在執行語句時只需要呼叫控制代碼就可以,而非sp_executesql那樣每次呼叫都必須傳遞語句和變數。這樣處理在多次呼叫同一語句的情況下,執行速度和**簡潔度都要好一些,不過除此之外暫時沒有感覺到有其他好處。

test:

declare @p1  int

exec sp_prepare @p1 output, n'@orderid bigint',

n'select top 100 * from liebo.orderflow.[order] with(nolock)

where orderid=@orderid

', 1

select @p1

exec sp_execute @p1, '110826001488'

exec sp_execute @p1, '110826002278'

exec sp_execute @p1, '110826004999'

exec sp_execute @p1, '110826006893'

[分享]sp_prepare你用過嗎?

最近研究ado的資料構形技術的時候,跟蹤sql server發現有如下的sql**被執行

set no_browsetable off — 這個未公開的設定,不知道是什麼作用

set fmtonly on select bill_id from tbl_wh_bill_detail set fmtonly off

set no_browsetable on

declare @p1 int

set @p1=22

– 我要說的就是這個 sp_prepare ,用來預編譯sql語句

exec sp_prepare @p1 output, n』@p1 uniqueidentifier』, n』select * from tbl_wh_bill_detail where bill_id = @p1′, 1

select @p1

set no_browsetable off

select * from tbl_wh_bill_head where warehouse = 『2002′

set no_browsetable on

– 這是我第一次見到 sp_execute 的這種用法,用她來執行預編譯sql語句,比反覆呼叫sp_executesql效率高多了

exec sp_execute 22, 『9e44402b-12cf-4ab4-b1a7-00ab21608cdb』

exec sp_execute 22, 『44811aba-5b1e-4ce2-8e67-0744fcedb072′

exec sp_execute 22, 『bfbaf066-4a28-42e0-9a90-08912df18e13′

exec sp_execute 22, 『16572595-b555-4d8e-96df-0a48350820a6′

exec sp_execute 22, 『fadd71da-9381-4207-8266-0d0f0ffeccc0′

/* –如果用sp_executesql,每一次呼叫都必須重新編譯, 形如:

exec sp_executesql n』select * from tbl_wh_bill_detail where bill_id = @p1′

,n』@p1 uniqueidentifier』

,』9e44402b-12cf-4ab4-b1a7-00ab21608cdb』

private sub command25_click()

dim rst as new adodb.recordset

dim rs as new adodb.recordset

set rs = rst("billdetail").value

do until rst.eof

debug.print rs("bill_id"), rst("bill_code")

do until rs.eof

debug.print rs("bill_id"), rs("item_name")

rs.movenext

loop

rst.movenext 『rst 移動記錄指標的時候, rs是只是相應的記錄, 如果是用引數話的構形,每次只從伺服器返回相應的記錄,而不是一次性返回所有

loop

rs.close

rst.close

set rst = nothing

set rs = nothing

end sub

為了說明問題,再轉貼一篇

上下問語句控制代碼Release地方

oci 在query中 cli 在fetch中 在父類中定義了public release和protected release,protected release在public release中被呼叫 在子類中重新protected release 父類物件呼叫public release,呼叫pr...

達夢資料庫無效的語句控制代碼

今天檢視tomcat歷史執行記錄有乙個error錯誤,詳細資訊如圖 根據此錯誤檢視多處配置檔案 jdbc.properties 配置均正常 考慮到關於資料庫控制代碼的引數值限制找到手冊 dm系統管理員手冊 如圖 達夢控制代碼引數設定 max session statement 再次檢視資料庫實際值如...

SQL語句句型整理

建表 create table 表名稱 列名稱1 資料型別,列名稱2 資料型別,列名稱3 資料型別,create table orders id o int not null,orderno int not null,id p int,primary key id o foreign key id ...