2014-04-08 64 views
0

我想在选择特定ID时屏蔽所有其他ID。但它不会运行。这是我迄今为止所拥有的。SQL Server 2008中的数据屏蔽

这是我当前的代码:

USE [DB1] 
Declare IDCursor Cursor 
    For 
     Select ID, Year, Amount, RefreshDate 
     From Table1 
     For Update 
    Open IDCursor 
    Declare @ID int, @Year datetime, @Amount money, @RefreshDate datetime 
    Fetch Next From IDCursor 
    Into @ID, @Year, @Amount, @RefreshDate 
    While @@Fetch_Status = 0 
Begin 
    If @ID <> 0 
    SELECT SUBSTRING(CONVERT(varchar(255), NEWID()), 0, 5) 

    Else 
    Set @ID = 0 

End 
Close IDCursor 
Deallocate IDCursor 
+0

你得到了什么错误? –

+0

没有显示,它只是不断运行 – user3508195

回答

0

不知道这只是一个错字?您是否想要以不同的方式执行以下设置@ID?

Begin 
    If @ID <> 0 
    Set @ID = SUBSTRING(CONVERT(varchar(255), NEWID()), 0, 5) 
    --OR MAYBE SELECT @ID = SUBSTRING(CONVERT(varchar(255), NEWID()), 0, 5) 

Else 
    Set @ID = 0 

+0

它只是说'执行查询'。它已经运行了近一个小时 – user3508195

+0

游标是我通常避开的方式。你不能这样做的更新基于一组的一部分,即 更新 \t表1 设置 \t ID =案例 \t \t当ID = 0,那么0 \t \t其他SUBSTRING(CONVERT(VARCHAR(255),NEWID( )),0,5) \t end –

0

你的循环条件While @@Fetch_Status = 0永远不会改变,所以你有一个无限循环。你需要在循环中继续提取:

While @@Fetch_Status = 0 
Begin 
    ... 
    Fetch Next From IDCursor Into @ID, @Year, @Amount, @RefreshDate 
End