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

sp_executesql和exec的區別

******************   EXEC的用法   **********************

declare @sqlStr varchar(4000)

set @sqlStr = 'xxxxx'

exec @sqlStr          -- 執行儲存過程

exec (@sqlStr)        -- 執行sql語句

******************   sp_executesql的用法   *********************

sql2005中引入的新的系統儲存過程,用來處理動態sql

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

@sql   拼成的動態sql 
N'@count int out,@id varchar(20)'    拼成的動態sql內的引數列表 
@cou out,@id    為動態sql內參數列表提供值的外部引數列表 

******************   EXEC 與 sp_executesql的比較   *********************

declare @sqlStr varchar(4000)
declare @sWhere nvarchar(4000)
declare @resultNum int = 0 output

set @sqlStr = 'select @resultNum = count(*) from Table1' + @sWhere       --變數應在字串外,如 @sWhere

exec (@sqlStr)                                                           --字串內的變數 @resultNum 將導致異常

exec sp_executesql @sqlStr,N'@resultNum int OUTPUT',@resultNum OUTPUT    --正常執行

ps:兩者最大的區別是嵌入式的引數