Top 后能不能用变量?

白羊999 2006-09-26 10:01:29
Create Table OrderingThings
(
Id Int Not Null, -- 编号,也作为排序号处理
Content Text Not Null, -- 事件内容
)
Go

-- 主键约束
Alter Table OrderingThings
Add Constraint PK_Id Primary Key (Id)
Go

这是我写的表,就两个字段。此表使用一段时间后,Id 号会呈上涨趋势。
所以,我就写了一个整理 Id 的存储过程。如下:

1 Create Procedure proc_ArrangeId
2 As
3 Declare @count int -- 记录表中有多少条记录
4 Set @count = ( Select count(*) From OrderingThings )
5 Declare @i int -- 用作循环变量
6 Set @i = 1
7 While(@i <= @count)
8 Begin
9 Update OrderingThings Set Id = @i
10 Where Id = (
11 Select Top 1 Id From OrderingThings -- 查询表中第一条记录,
-- 第二条记录,…,最后一条记录
12 Where Id Not In ( Select Top @i-1 Id From OrderingThings )
13 )
14 Set @i = @i + 1
15 End

但是,这个过程出现了一个问题:
服务器: 消息 170,级别 15,状态 1,过程 proc_ArrangeId,行 12
第 12 行: '@i' 附近有语法错误。
这个错误难道是 Top 关键字后不能用变量么?
请各位看官帮帮小弟~
小弟先谢谢各位了!
...全文
142 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
子陌红尘 2006-09-26
  • 打赏
  • 举报
回复
Create Procedure proc_ArrangeId
As
Begin
Update t
Set
Id =(select isnull(count(*),0)+1 from OrderingThings where id<t.id)
from
OrderingThings t
End
点点星灯 2006-09-26
  • 打赏
  • 举报
回复
--一样的问题,转化为动态的SQL语句
http://community.csdn.net/Expert/topic/5040/5040547.xml?temp=.2855799

34,575

社区成员

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

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