平时在写存储过程的时候经常会遇到这样的一个场景:
目的:是为了获得一个参数集和一些自定义输出参数
输入参数:一个查询状态(where a = ...)
需求:需要执行一个字符串来给一个中间参数或是一个输出参数赋值
解决方案:通过使用"SP_EXECUTESQL" 这个系统存储过程
它的语法是这样的:
sp_executesql [ @stmt = ] stmt
[
{, [@params=] N'@parameter_name data_type [ [ OUT [ PUT ][,...n]' }
{, [ @param1 = ] 'value1' [ ,...n ] }
]
说明:我google了一下 sp_executesql 发现还是蛮多的,这里就不去介绍这个存储过程了。这里主要写
一下自己在工作中如何解决这个问题,也算是做一下工作笔记,以便下次遇到这个问题的时候可以快速解
决,其他人遇到这个问题的时候也可以稍稍节约点时间,虽然仅仅是个小问题,嘿嘿!
--获得记录条数:
DECLARE @SQL nvarchar(2000)
SELECT @SQL = 'SELECT @CountTemp=count(*) FROM TableName ' + @ConditionSQL
EXECUTE SP_EXECUTESQL
@SQL,
N'@CountTemp int output',
@CountTemp = @RecordCount output
SELECT @RecordCount=ISNULL(@RecordCount,0)
备注:
@RecordCount int output 是一个输出参数
TableName :为表名
@CountTemp :临时变量(字符串里的一个变量,做临时存储记录条数用)
注意:
@RecordCount 作为存储过程的中间参数的话,也一定要声明为output,不然得不到值
这样就达到我的目的了。