首页蓝耳朵|小小蓝耳朵广州图书馆外文室英语儿童读物资源介绍网佛教青年之友旧版收集永硕E盘Phonics Short Vowels Game 
执行动态sql语句时,返回参数值
所属栏目:MS SQL 2000  时间:2009-06-12 17:04  作者:狼子

以前一直用临时表的方法,好笨蛋。。。

今天对一个分页的存储过程估计了一下执行计划,光是用临时表取符合条件的总记录数时,开销就占60%,然后呢,从临时表里select出总记录数,又占开销20%,剩下从表里面返回数据又占20%开销,然后呢,我的存储过程的100%开销就分完了

看到我眼睛都绿了,从来没有想到会这样子,笨蛋笨蛋笨蛋,大大的大笨蛋,就是我了

下面是以前的笨蛋办法

select @sql = 'select count(OrderID) from ' + @tableName + @item
execute(@sql)
create table #temp (row int)
insert into #temp ( row ) execute(@sql)
select @rowsCount = row from #temp
drop table #temp
select @rowsCount as rowsCount, @pageSize as pageSize, @page as pageIndex,
       pageCount = case @rowsCount % @pageSize when 0 then @rowsCount / @pageSize else @rowsCount / @pageSize + 1 end

啊,这个办法我还要用了这么久,真笨蛋

今天解决这个问题了,用sp_executesql接收执行动态sql语句时返回的参数,方法如下

set @sql = 'select @RowsCount_Opuput = COUNT(*) from SalesLT.Product where ProductCategoryID = @CategoryID and Color = @Color'
set @sqlParm = '@CategoryID int, @Color varchar(20), @RowsCount_Opuput int output'
exec sp_executesql @sql, @sqlParm, @CategoryID = 18, @Color = 'Black', @RowsCount_Opuput = @RowsCount output
select @RowsCount

上面这段代码用的是ms sql 2008的示例数据库AdventureWorksLT2008数据库,相同方法在sql2000下可以使用的,郁闷,以前为什么就没有不知道用sp_executesql呢?

exec sp_executesql的参数,第一个是要执行的动态命令,第二个是动态命令里用到的参数声明,第三个开始,是动态命令里用到的参数的值,如果要返回,加上output就可以了

几简单的方法啊,郁闷,以前好笨蛋

小楼宝宝的涂鸦花花(Imitater)的博客起名称骨测字皖ICP备06000023号-17