在返回分页数据时,我们会经常会用到参数化传递过滤条件,如何拼接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)