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