为什么SQL Server的存储过程中的TOP不能带参数?

gauss 2005-03-25 03:18:27
SQL Server 2000。


存储过程是

create procedure proc_goodstudent( @number int )
as
begin
select top @number * from student order by score
end

不能通过编译,显示“错误170,@number附近有语法错误。”

怎么妥善解决这个问题? 在线等。
...全文
198 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
gauss 2005-03-25
  • 打赏
  • 举报
回复
http://www.aspfaq.com/show.asp?id=2521

http://www.microsoft.com/china/sql/using/tips/development/May21.asp


我觉得set rowcount 不好之处是影响了子查询的行数,所以在用到rowcount时,一定不能嵌套子查询,除非rowcount设得足够大。

good2speed 2005-03-25
  • 打赏
  • 举报
回复
sql server 2005将支持
gauss 2005-03-25
  • 打赏
  • 举报
回复
Yukon 中的 T-SQL TOP 选项有两处显著的功能增强。现在您可以将一个表达式指定为 TOP 的参数,表达式可以包含变量甚至是独立的查询。您还可以通过改进型 DML (INSERT, UPDATE, DELETE) 使用 TOP 选项。

为了指定一个表达式,必须将它用括号括起来。当不使用 PERCENT 选项时,表达式应该是 BIGINT 数据类型的;当使用 PERCENT 选项时,应该是范围从 0 到 100 的一个浮点值。以下代码说明了如何使用带有一个变量的表达式,以按所请求数量返回 AdventureWorks 数据库中 SalesOrderHeader 的最早定单:

USE AdventureWorks
DECLARE @n AS BIGINT
SET @n = 5
SELECT TOP (@n) *
FROM SalesOrderHeader AS SOH
ORDER BY OrderDate, SalesOrderID

SalesOrderID 用作附加键。类似的,以下示例说明了如何使用 PERCENT 选项按所请求百分比返回最早定单:

DECLARE @p AS FLOAT
SET @p = 0.01
SELECT TOP (@p) PERCENT *
FROM SalesOrderHeader AS SOH
ORDER BY OrderDate, SalesOrderID

---shit!难到我要等到Yukon出来?

有谁可以告诉我

set rowcount N
select ....
set rowcount 0

是否等价于 select top N ... ?
xluzhong 2005-03-25
  • 打赏
  • 举报
回复
create procedure proc_goodstudent( @number int )
as
begin
set rowcount @number
select * from student order by score
end
xluzhong 2005-03-25
  • 打赏
  • 举报
回复
create procedure proc_goodstudent( @number int )
as
begin
exec('select top '+@number+' * from student order by score')
end
gauss 2005-03-25
  • 打赏
  • 举报
回复
谢谢,我之前也试过这个方法可行,但是觉得这样很麻烦,这样又退回到在程序里拼接SQL语句那个状态了。

有没有更好的方法?
paoluo 2005-03-25
  • 打赏
  • 举报
回复
使用动态语句

create procedure proc_goodstudent( @number int )
as
begin
Exec('select top '+ @number + '* from student order by score')
end
jinjazz 2005-03-25
  • 打赏
  • 举报
回复
--参考
use northwind
go
declare @number integer
set @number=4
exec('select top '+@number +'* from orders order by orderid')

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧