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