在返回分頁數據時,咱們會常常會用到參數化傳遞過濾條件,如何拼接SQL語句成了一個難題。sql
咱們能夠這樣拼接:測試
exec('sp_executesql sql語句,參數定義,參數值')spa
sql語句和參數定義部分直接傳遞字符串便可,但參數值部分則要求是變量或常量,傳遞字符串則不能夠。經測試,直接按sp_executesql格式要求傳遞in的參數是能夠的,但傳遞out參數怎麼都不能夠,一直報未定義,這是與變量的做用域有關。怎麼辦呢?內存
通過一天的研究,看到某大俠使用內存表來實現數據插入:作用域
INSERT INTO @t(recordcount)字符串
exec(@sql); table
有沒有一種豁朗開朗的感受,咱們也能夠經過這種方式,把sp_executesql執行的結果放到內存表@t中,這樣相關的返回值則能夠經過讀取內存表的形式來賦值,從而解決了經過字符串定義SQL語句及參數沒法返回值的問題,也實現了table型數據的傳遞。class
核心代碼以下:變量
Declare @T Table (totalCount int,totalPage int)sql語句
insert @T(totalCount,totalPage) EXEC('SP_EXECUTESQL N'''+@sql+''',N'''+@parameterNames+''','+@parameterValues)