sp_executesql和exec的區別
阿新 • • 發佈:2019-02-03
****************** 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 --正常執行
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:兩者最大的區別是嵌入式的引數