我写了一个存储过程,要返回记录集中的前x行的数据,我想把@x作为一个参数,也就是输入一个int数字作为参数,返回想获取的前多少行。直接用是不行的,请问有没有什么办法?
create proc YourSelect
@n int
as
begin
SET ROWCOUNT @n
select ID,Name from table1
end
这个方法不能用于select嵌套查询阿!!!!!!!!!!!!如果要实现下面的语句,该怎么办:返回ID<100而且离ID=100最近的@x行,但是结果还要按照升序排列
例如:如果@x==10的话,也就是返回ID=90,91,92,93,......,99的记录。
select * from(SELECT top @x ID,Name FROM table1 where ID<100 order by ID desc ) as aa order by ID
该怎么使用SET ROWCOUNT @n呢??
create proc YourSelect
@n int
as
begin
SET ROWCOUNT @n
select ID,Name from table1
end
这个方法不能用于select嵌套查询阿!!!!!!!!!!!!如果要实现下面的语句,该怎么办:返回ID<100而且离ID=100最近的@x行,但是结果还要按照升序排列
例如:如果@x==10的话,也就是返回ID=90,91,92,93,......,99的记录。
select * from(SELECT top @x ID,Name FROM table1 where ID<100 order by ID desc ) as aa order by ID
该怎么使用SET ROWCOUNT @n呢??
解决方案 »
- 刚学asp.net,有几个地方不懂!
- 关于powerdesign中的一点问题。在线等,立即结帐。
- 强列不建议现在安装vs2008 sp1
- 请使用过ajax.dll的进来,ajax.dll默认是异步方式,如何改为同步方式呢?
- 用datview 进行数据的排序和筛选
- 各位XDJM,有没有人在webservice中用mailmessage类发送邮件的啊?有点疑惑请大家指点一下啊!
- 帮忙看下这一段有什么问题?
- HELP!!
- 高手请进,asp.net 访问VB6 DLL的问题
- 高分求救:以下错误如何解决 >>>已在多处定义“object”…………;
- 解决问题,即刻结帖!!!
- 求优秀的ASP.NET学习案例~~
返回ID<100而且离ID=100最近的@x行,但是结果还要按照升序排列
例如:如果@x==10的话,也就是返回ID=90,91,92,93,......,99的记录。
类似select * from(SELECT top @x ID,Name FROM table1 where ID<100 order by ID desc ) as aa order by ID
该怎么使用SET ROWCOUNT @n呢??
exec(@sql)你去查动态sql的例子
其实非常简单的
select top 10 * from [case] where caseid<100 order by caseid descif 10 is a variable
you may excute it like
set @sql=select top '+@num+' * from [case] where caseid<100 order by caseid desc'
exec(@sql)
exec(@sql)
调试通过
http://www.codeproject.com/aspnet/PagingLarge.asp
我说的@top10是一定是nchar类型的吧,但是当 @top10如果是大于12的话就不行了,比如我set @top10=50,结果还是返回12条记录啊??
Declare @sql varchar(2000)
Set @x='100'
Set @sql='select * from
(SELECT top '+@x+' ConID,ConSN FROM ContractSale where ConID<1000 order by ConID desc ) as aa
order by ConID'
exec(@sql)
declare @top100 int
declare @sql varchar(1000)
set @top10=10
set @top100 =100
set @sql='select top '+str(@top10) +' * from (select top ' +str(@top100) +'* from table where 序号>1000 order by 序号 asc) as aa order by 序号 desc'
exec(@sql)
我试不存在你所说的 @top10如果是大于12的话就不行了的情况.能说详细点吗?
我看看你给的东西先!
DECLARE @n AS BIGINT
SET @n = 5SELECT TOP (@n) *
FROM SalesOrderHeader AS SOH
ORDER BY OrderDate, SalesOrderIDDECLARE @p AS FLOAT
SET @p = 0.01SELECT TOP (@p) PERCENT *
FROM SalesOrderHeader AS SOH
ORDER BY OrderDate, SalesOrderID要像在2000里用,请参考:
http://www.sqlteam.com/item.asp?ItemID=233
drop proc Lottery
go
create proc Lottery
(
@PageNO int=1,
@PageSize int,
@Rows int=0 output
)
as
select @Rows=Count(*) from NameList
set @PageNO=(@PageNO-1)*@PageSize
exec
('
select
top '+@PageSize+' NameList.AutoID,NameList.UserNumber,NameList.Name,NameList.PrizeValue,NameList.UserID,NameList.LDate,Users.IDNO
from
NameList
join
Users
on
NameList.UserID=Users.UserID
where
ID not in
(
select Top
'+@PageNO+' ID
from
NameList
order by
ID DESC
)
order by
ID DESC
')
GO
use Northwind
declare @xx int
declare @CategoryId int
set @xx=16
set @CategoryId=1declare @strSql nvarchar(3000)
SET @strSql='SELECT top '+str(@xx)+' ProductID,ProductName,SupplierID,CategoryId FROM Products where CategoryId='+str(@CategoryId)+'order by ProductID desc'
exec(@strSql)结果就是12条记录,这是为什么?????????
你试一下
结果就只有12条记录,那么你top 多少都不会超过12
declare @ID intset @n=20SET ROWCOUNT @n
select @ID= newsID from newsprint @id --定位SET ROWCOUNT 10
select * from news where newsID > @id
另外 BS那些用exec回复的人,在存储过程里面用exec ,那使用存储过程还有多大意义呢,而且只局限在能实现就可以了,而不去寻求更高效的解决方法。这样怎么提高呀!!!