请教!!
我想在删除时某一行时自动更新编号列,就是全部置空然后重新累加
1,2,3,4这样。
但是。。
----------------------
select count(falseID) from doctordeclare @i int
set @i=1
while(11)//上面求出的总行数
begin
update doctor set falseID=@i where falseID=0
@i+1
end哎 条件怎么弄啊 SQL怎么控制游标的下移呢,这样的话 我就可以顺序更新了 不需要上移下移就行了
我想在删除时某一行时自动更新编号列,就是全部置空然后重新累加
1,2,3,4这样。
但是。。
----------------------
select count(falseID) from doctordeclare @i int
set @i=1
while(11)//上面求出的总行数
begin
update doctor set falseID=@i where falseID=0
@i+1
end哎 条件怎么弄啊 SQL怎么控制游标的下移呢,这样的话 我就可以顺序更新了 不需要上移下移就行了
select @count = (falseID) from doctor
set @i=1
while(@i<=@count)//上面求出的总行数
begin
update doctor set falseID=@i where falseID=0
@i+1
end
select @count = (falseID) from doctor set @i=1
while(@i <=@count)
begin
update doctor set falseID=@i where falseID=0
set @i=@i+1
end 清空后 执行你这个后居然提示命令已成功完成 没提示影响的行数 结果是。。一行都没更新。。
会把所有falseID=0的记录的falseID字段都设置为@i的值
楼上的代码之所以没更新,我觉得select @count = (falseID) from doctor 这条语句执行后@count的值很有可能是0
--开始事务
BEGIN TRAN--不显示计数信息
SET NOCOUNT ONDECLARE @falseID nvarchar(50)
DECLARE @a int
set @a=1--声明游标
DECLARE falseID_cursor CURSOR FOR
SELECT [falseID] FROM doctor --打开游标
OPEN falseID_cursor--取第一行的值给变量
FETCH NEXT FROM falseID_cursor
INTO @falseID --执行语句
update doctor set falseID=@a where falseID=@falseID
set @a=@a+1
--执行错误回滚
if @@error!=0
begin
rollback tran
return
end
--移动游标,其它所有行更新操作(当到结尾时退出)
WHILE @@FETCH_STATUS = 0
BEGIN
--游标移到下一行
FETCH NEXT FROM falseID_cursor
INTO @falseID --执行语句,从第二行开始
update doctor set falseID=@a where falseID=@falseID
set @a=@a+1 --执行错误回滚
if @@error!=0
begin
rollback tran
return
endEND
--关闭游标
CLOSE CRMPSContact_cursor--释放游标
DEALLOCATE CRMPSContact_cursor--提交所有变更
COMMIT TRAN--恢复设置
SET NOCOUNT OFF
GO
SET NOCOUNT ONDECLARE @falseID nvarchar(50)
DECLARE @a int
set @a=1DECLARE falseID_cursor CURSOR FOR
SELECT [falseID] FROM doctor OPEN falseID_cursorFETCH NEXT FROM falseID_cursor
INTO @falseID update doctor set falseID=@a where falseID=@falseID
set @a=@a+1 --执行错误回滚
if @@error!=0
begin
rollback tran
return
end
--移动游标,其它所有行更新操作(当到结尾时退出)
WHILE @@FETCH_STATUS = 0
BEGIN FETCH NEXT FROM falseID_cursor
INTO @falseID
update doctor set falseID=@a where falseID=@falseID
set @a=@a+1 --执行错误回滚
if @@error!=0
begin
rollback tran
return
endEND
--关闭游标
CLOSE falseID_cursor -- 上面的回答这里游标名称写错了--释放游标
DEALLOCATE falseID_cursor --提交所有变更
COMMIT TRAN--恢复设置
SET NOCOUNT OFF
GO