日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 芯聞號 > 充電吧
[導(dǎo)讀]execute相信大家都用的用熟了,簡寫為exec,除了用來執(zhí)行存儲過程,一般都用來執(zhí)行動態(tài)Sql?sp_executesql,sql2005中引入的新的系統(tǒng)存儲過程,也是用來處理動態(tài)sql的, 如:

execute相信大家都用的用熟了,簡寫為exec,除了用來執(zhí)行存儲過程,一般都用來執(zhí)行動態(tài)Sql?
sp_executesql,sql2005中引入的新的系統(tǒng)存儲過程,也是用來處理動態(tài)sql的, 如:?

exec?sp_executesql?@sql,?N'@count?int?out,@id?varchar(20)',?@cou?out?,@id

@sql為拼成的動態(tài)sql?
N'@count int out,@id varchar(20)'為拼成的動態(tài)sql內(nèi)的參數(shù)列表?
@cou out,@id為為動態(tài)sql內(nèi)參數(shù)列表提供值的外部參數(shù)列表?

那么它們之間有什么區(qū)別呢??

1、它們之間最大的區(qū)別是嵌入式的參數(shù),如下面一個語句?

DECLARE?@sql?NVARCHAR(2000);?
DECLARE?@id?VARCHAR(20);?
SET?@id?=?'1';?
SET?@sql?=?'select?count(*)?from?emp?where?id='?+?@id;?
EXEC?@sql;

我想把得到的count(*)傳出來,用傳統(tǒng)的exec是不好辦到的,但是用sp_executesql則很容易就辦到了:?

DECLARE?@sql?NVARCHAR(2000);?
DECLARE?@cou?INT;?
DECLARE?@id?VARCHAR(20);?
SET?@id?=?'1';?
SET?@sql?=?'select?@count=count(*)?from?emp?where?id=@id';?
EXEC?sp_executesql?@sql,?N'@count?int?out,@id?varchar(20)',?@cou?OUT,?@id;?
PRINT?@cou;

2、性能?
可以看到,如果用exec,由于每次傳入的@id不一樣,所以每次生成的@sql就不一樣,這樣每執(zhí)行一次Sql2005就必須重新將要執(zhí)行的動態(tài)Sql重新編譯一次?
但是sp_executesql則不一樣,由于將數(shù)值參數(shù)化,要執(zhí)行的動態(tài)Sql永遠(yuǎn)不會變化,只是傳入的參數(shù)的值在變化,那每次執(zhí)行的時候就秒用重新編譯,速度自然快多了哈!?

注意:?
1.sp_executesql要求動態(tài)Sql和動態(tài)Sql參數(shù)列表必須是Nvarchar,比如上個例子的@sql,N'@count int out,@id varchar(20)'我記得在sql2005中Varchar也可以的,但是我打了Sp3補丁后就不行了,必須為Nvarchar?
2.動態(tài)Sql的參數(shù)列表與外部提供值的參數(shù)列表順序必需一致,如:?
N'@count int out,@id varchar(20)', @cou out,@id?
@count 對應(yīng) @cou,@id對應(yīng)@id?
如果不一致,必須顯式標(biāo)明,如:?
N'@count int out,@id varchar(20)', @id=@id, @count=@cou out?
3.動態(tài)SQl的參數(shù)列表與外部提供參數(shù)的參數(shù)列表參數(shù)名可以同名

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉