1. 程式人生 > >EXEC和sp_executesql的區別

EXEC和sp_executesql的區別

首先是微軟library對sp_executesql的介紹(http://technet.microsoft.com/zh-cn/library/ms188001.aspx), 並指出相對於exec(ute)的優勢:

  • 由於 sp_executesql 字串中的 Transact-SQL 語句的實際文字在兩次執行之間並未改變,因此,查詢優化器應該可以將第二次執行中的 Transact-SQL 語句與第一次執行時生成的執行計劃相匹配。 因此,SQL Server 不必編譯第二條語句。

  • Transact-SQL 字串只生成一次。

  • 整數引數按其本身格式指定。

     不需要轉換為 Unicode。

然後是興百放( http://www.cnblogs.com/xbf321/archive/2008/11/02/1325067.html)對其重複利用執行計劃的驗證, 摘要如下:
MSSQL為我們提供了兩種動態執行SQL語句的命令,分別是EXEC和sp_executesql;通常,sp_executesql則更具有優勢,它提供了輸入輸出介面,而EXEC沒有。還有一個最大的好處就是利用sp_executesql,能夠重用執行計劃,這就大大提供了執行效能(對於這個我在後面的例子中會詳加說明),還可以編寫更安全的程式碼。EXEC在某些情況下會更靈活。除非您有令人信服的理由使用EXEC,否側儘量使用sp_executesql.