Sql語句拼接(EXEC和sp_executesql的區別)


1.前言

MSSQL為我們提供了兩種動態執行SQL語句的命令,分別是EXEC和sp_executesql;
通常,sp_executesql則更具有優勢,它提供了輸入輸出接口,而EXEC沒有。
還有一個最大的好處就是利用sp_executesql,能夠重用執行計划,
這就大大提供了執行性能(對於這個我在后面的例子中會詳加說明),
還可以編寫更安全的代碼。EXEC在某些情況下會更靈活。
除非您有令人信服的理由使用EXEC,否側盡量使用sp_executesql.

2.EXEC的使用

EXEC命令有兩種用法,一種是執行一個存儲過程,另一種是執行一個動態的批處理。以下所講的都是第二種用法。

DECLARE @TableName VARCHAR(50),@Sql NVARCHAR(MAX),@Num INT;
SET @TableName = 'wolf_example';
SET @Num = 20038;
EXEC('SELECT * FROM ' + @TableName +' WHERE Num = '+ @Num +' ORDER BY Num DESC') --正常

SET @sql='SELECT * FROM ' + @TableName +' WHERE Num = '+ @Num +' ORDER BY Num DESC'; 
EXEC(@sql); --異常

 3.sp_executesql的使用

DECLARE @TableName VARCHAR(50),@Sql NVARCHAR(MAX),@Num INT;
SET @TableName = 'wolf_example';
SET @Num = 20038;
SET @sql='SELECT * FROM ' + @TableName +' WHERE Num = '+ CAST(@Num as varchar(10)) +' ORDER BY Num DESC'; 
EXEC sp_executesql @sql; --正常
DECLARE @Sql NVARCHAR(MAX);
DECLARE @ONum as INT;
SET @Sql='SELECT @OutNum=num FROM wolf_example WHERE Num = @Num AND Name=@Name'; 
EXEC sp_executesql
   @Sql, 
   N'@Num as INT,@Name as VARCHAR(50),@OutNum as INT OUTPUT', 
   @Num = 20038,
   @Name= '11',
   @OutNum = @ONum OUTPUT
SELECT @ONum 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM