2014-04-08 65 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