2 jajacool jajacool 于 2015.07.21 23:39 提问

SQL server存储过程取不出值
 ALTER Proc [dbo].[sp_pages]
(
  @Sql varchar(max) ,
  @Order varchar(4000) ,
  @CurrentPage int ,
  @PageSize int,
  @TotalCount int output
)
As
/*Andy 2012-2-28 */
Declare @Exec_sql nvarchar(max)
Declare @Exec_sql2 nvarchar(max)

Set @Exec_sql='Set @TotalCount=(Select Count(1) From ('+@Sql+') As a)'
Exec sp_executesql @Exec_sql2,N'@TotalCount int output',@TotalCount output

Set @Order=isnull(' Order by '+nullif(@Order,''),' Order By getdate()')

if @CurrentPage=1 /*经常会调用第1页,这里做特殊处理,少一层子查询*/
    Set @Exec_sql='
    ;With CTE_Exec As
    (
        '+@Sql+'
    )
    Select Top(@pagesize) *,row_number() Over('+@Order+') As r From CTE_Exec Order By r
    ' 
Else
    Set @Exec_sql='
    ;With CTE_Exec As
    (
        Select *,row_number() Over('+@Order+') As r From ('+@Sql+') As a 
    )
    Select * From CTE_Exec Where r Between (@CurrentPage-1)*@pagesize+1 And @CurrentPage*@pagesize Order By r
    '


Exec sp_executesql @Exec_sql,N'@CurrentPage int,@PageSize int',@CurrentPage,@PageSize

Cmd.Parameters("@TotalCount").value 取不到值,因为这里有二个
Exec sp_executesql 求方法,如果把最后的Exec sp_executesql 删掉,把上面的放下来就行。

5个回答

caozhy
caozhy   Ds   Rxr 2015.07.22 06:13
已采纳

放成单条的sql语句才好调试。

jajacool
jajacool 给个例子好吗,不太熟悉,多谢
2 年多之前 回复
CSDNXIAOD
CSDNXIAOD   2015.07.21 23:42

sql server 2000存储过程的返回值
SQL SERVER 中通过存储过程获得自增的主键值
Sql Server 存储过程可选参数
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

yuke198907
yuke198907   2015.07.22 09:38

@Sql没有赋值吧,在查询totalCount的时候

jajacool
jajacool 赋值了,就是这个过程里,有二个Exec sp_executesql ,totalCount在上面,所以取不到,放到下面,就可以了,但这样,下面的查询就不行了
2 年多之前 回复
cabbage200
cabbage200   2015.07.23 11:22

Set @Exec_sql='Set @TotalCount=(Select Count(1) From ('+@Sql+') As a)'
这句话有问题吧 是不是应该是
Set @Exec_sql='Set ' + @TotalCount + '=(Select Count(1) From ('+@Sql+') As a)'

sina_2831808769
sina_2831808769   Rxr 2015.07.25 14:02

放成单条的sql语句才好调试。

Csdn user default icon
上传中...
上传图片
插入图片