select top 10 那个 10 能改成变量吗?

存储过程我是这样写的

CREATE proc hnsm_user(
@sortname NVarChar(30),
@nsortname NVarChar(30),
@page int)
as
select top 20 * from bbs_member
go


我想把 那个 20 改成变量

因为可能是会变的

declare @num int
set @num=20

select top @num * from bbs_member

这样不行



求教大家,,还有如果要 乘于 @page 应该怎么写呢?

作者: lijianc23   发布时间: 2011-06-11

SQL code

-- 1 可以试试

declare @num int
set @num=20

select top(@num) * from bbs_member

-- 2 可以试试

declare @num int
declare @sql varchar(1000)
set @num=20
set @sql='select top '+ltrim(@num)+' * from bbs_member'
exec(@sql)

作者: AcHerat   发布时间: 2011-06-11

SQL code

declare @i int, @sql varchar(200)
set @i = 20 
set @sql = 'Select top '+convert(varchar(5), @i)+' * from sysobjects'
exec(@sql)

作者: jxqn_liu   发布时间: 2011-06-11

SQL code
declare @i int, @sql varchar(200)
set @i = 20 
set @sql = 'Select top ('rtrim(@i)+') * from sysobjects'
exec(@sql)

作者: zy112429   发布时间: 2011-06-11

楼上正解

作者: chuanzhang5687   发布时间: 2011-06-11

SQL code
declare @num int
set @num=20

select top(@num*@page) * from bbs_member

作者: chuanzhang5687   发布时间: 2011-06-11

sql2000 不支持 top @变量,sqlserver 2005开始就可以了

作者: zjl8008   发布时间: 2011-06-11

SQL code
 动态 sql

作者: abcjun188   发布时间: 2011-06-11

可以,你传一个参数,然后用SQL动态语句实现

CREATE proc hnsm_user(
@sortname NVarChar(30),
@nsortname NVarChar(30),
@page int,
@Top int)
as
  Declare @Sql NVarchar(2000)
  Set @Sql = ' select top ' + Cast(@Top As Varchar(10))+ ' * from bbs_member '
  Exec(@Sql)
go

作者: Lyongt   发布时间: 2011-06-11

SQL code

-- SQL SERVER 2005+
declare @num int set @num=20 
select top(@num) * from bbs_member 

-- SQL SERVER 2000
declare @num int ;set @num=20 
declare @sql varchar(8000) 
set @sql='select top '+ltrim(@num)+' * from bbs_member' 
exec(@sql)

作者: maco_wang   发布时间: 2011-06-11