从sp_executesql中返回table型数据及动态SQL语句的参数化查询

本文探讨了在SQL中使用参数化传递过滤条件时遇到的问题,并提出了一种利用内存表来解决通过字符串定义SQL语句及参数无法返回值的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

转载于:https://www.cnblogs.com/linux-withwind/p/6544467.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值