黑马程序员技术交流社区

标题: 存储过程报错 [打印本页]

作者: 黑马-杨鹏立    时间: 2013-3-4 11:27
标题: 存储过程报错

我想根据传入的表名查询表里相应数据,这种写法报错,请问需要怎样修改?谢谢。。。。

Create PROCEDURE ALLGetPageDataOutRowPageCount
(
@PageIndex int = 1,--当前页数
@PageSize  int = 4,--每页大小
@NowPage   int = 1,--根据传入栏目id要加载当前页的数据
@NowTable  NVARCHAR(50) = N'table',--当前传入表名
@RowCount int output,--总行数(传出参数)
@PageCount int output--总页数(传出参数)
)
AS
begin
        DECLARE @sql NVARCHAR(max),@sqlCount NVARCHAR(225)
        select @RowCount =COUNT(FChildId),@PageCount=CEILING((COUNT(FChildId)+0.0)/@PageSize) FROM @NowTable where FParentsId=@NowPage
        SET @sql='SELECT TOP '+LTRIM(str(@PageSize))+' * FROM '+@NowTable+' where FParentsId='+LTRIM(str(@NowPage))+' and FChildId not in(select top '+LTRIM(str((@PageIndex-1)*@PageSize))+' FChildId from '+@NowTable+' where FParentsId='+LTRIM(str(@NowPage))+' order by FImagIndex desc,FImageUpTime desc)order by FImagIndex desc, FImageUpTime desc'
        print @sql
        EXEC(@sql)
end

报错为{消息 1087,级别 15,状态 2,过程 ALLGetPageDataOutRowPageCount,第 13 行
必须声明表变量 "@NowTable"。}




作者: 曾玉锋    时间: 2013-3-4 16:47
你把nvarchar类型变量当成表变量在用!

Create PROCEDURE ALLGetPageDataOutRowPageCount
(
@PageIndex int = 1,--当前页数
@PageSize  int = 4,--每页大小
@NowPage   int = 1,--根据传入栏目id要加载当前页的数据
@NowTable  NVARCHAR(50) = N'table',--当前传入表名
@RowCount int output,--总行数(传出参数)
@PageCount int output--总页数(传出参数)
)
AS
begin
        DECLARE @sql NVARCHAR(max),@sqlCount NVARCHAR(225)
        --拼接动态sql语句
        declare @strs varchar(Max)=
        'select'+ @RowCount+' =COUNT(FChildId),'+@PageCount+'=CEILING((COUNT(FChildId)+0.0)/'+@PageSize+') FROM'+ @NowTable+' where FParentsId='+@NowPage
        --调用存储过程执行sql语句
        exec(@strs)
        
        SET @sql='SELECT TOP '+LTRIM(str(@PageSize))+' * FROM '+@NowTable+' where FParentsId='+LTRIM(str(@NowPage))+' and FChildId not in(select top '+LTRIM(str((@PageIndex-1)*@PageSize))+' FChildId from '+@NowTable+' where FParentsId='+LTRIM(str(@NowPage))+' order by FImagIndex desc,FImageUpTime desc)order by FImagIndex desc, FImageUpTime desc'
        print @sql
        EXEC(@sql)
end
go





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2