最近在做分页练习的时候,遇到一个小的问题,因为我只需要取得显示的页的记录就OK,但是分页总是要知道对应查询条件的总记录数吧,因为要在存储过程里面根据查询条件来生成动态sql语句,然后想使用exec执
最近在做分页练习的时候,遇到一个小的问题,因为我只需要取得显示的页的记录就OK,但是分页总是要知道对应查询条件的总记录数吧,因为要在存储过程里面根据查询条件来生成动态sql语句,然后想使用exec执行,但是问题来了,因为我打算在存储过程中通过输出参数来获取对应的总记录数,但是这个总记录数在存储过程中直接获取不到,只能在动态sql语句中获取,现在的问题就归结在这么把获取总记录返回到存储过程的输出参数中。现在简单贴出客户表结构:
接着贴出我的存储过程:
--使用EXECUTE直接执行获取不到总记录数 --EXECUTE (@sql) --使用EXECUTE执行sp_executesql存储过程才能获取到
其实以上两种执行的方式差别就是:一种是执行一个动态的批处理,另一种是执行一个存储过程
sp_executesql命令,因为它提供一个接口,该接口及支持输入参数也支持输出参数。这功能使你可以创建带参数的查询字符串,这样就可以比EXEC更好的重用执行计划,sp_executesql的构成与存储过程非常相似,不同之处在于你是动态构建代码。通过上面的列子的话可以看见直接执行批处理时获取不到动态语句里面的总记录数的。 构造动态sql的where子句,也就是条件子句时,exec无法使用变量来进行占位,需要将变量转换成字符串,然后和动态sql进行拼接,这就可能引起Sql注入问题,而通过sp_executesql就不会有这个问题 比如上面的存储过程可以按一下方式修改执行
修改一:
改为:
修改二 --使用EXECUTE执行sp_executesql存储过程才能获取到
改为 --使用EXECUTE执行sp_executesql存储过程才能获取到
至于sp_executesql更详细的语法及使用方式请参考其它资料,或者直接打开数据库然后按F1寻求帮助 嘿嘿!!
本站技术原创栏目文章均为中睿原创或编译,转载请注明:文章来自中睿,本站保留追究责任的权利。