2017-10-09 147 views
-1

我在列上使用了更新語句,現在我想將其反轉。有沒有辦法解決這個問題?如何撤消更新函數SQL Server?

這是原始數據

Name Score 
John 15 
John 15 

我用這個查詢:

UPDATE T1 
SET [score] = [score]+'na' 
WHERE (name = ‘john’) 

這給了我這樣的:

Name Score 
John 15na 
John 15na 

我可以撤消此並刪除na?我希望得分是一個浮動。

+2

你試過'rollback'嗎? –

+0

還沒有,你能舉個例子嗎? – luanstat

+0

我只是假設你知道'SQL'。在每個DBS中,你有'commit'這樣的東西使得數據變化持久化並且回滾,這使得UNDO自從上次提交(一些語句使自動提交)以來的所有變化。 –

回答

4

撤消通過刪除添加na

UPDATE T1 
SET [score] = LEFT([score],LEN([score])-2) 
where (name = 'john') 
+0

@justiceorjustus好點,但AFAICT從字符串中刪除'na'應該使它成爲一個浮點數,即使它包含在VARCHAR字段中。我不確定OP是否真的想將該列設置爲FLOAT類型。如果他這樣做,我會添加一些措施來做到這一點。 –

1

您可以做的TT。已經提及並手動更新到其原始值或ROLLBACK。如果IMPLICIT_TRANSACTIONS設置爲,您可以通過執行ROLLBACK TRANSACTION;來執行ROLLBACK。但是,如果EXPLICIT_TRANSACTIONS設置爲,那麼你需要指定一個BEGIN TRANSACTION是這樣的...

BEGIN TRANSACTION; 

UPDATE T1 
SET [score] = [score]+'na' 
where (name = ‘john’); 

--if unhappy with results.. 
ROLLBACK TRANSACTION; 
上,如果,如果你想 ROLLBACK不指定每次 BEGIN TRANSACTION它尚未

或設置IMPLICIT_TRANSACTIONS

SET IMPLICIT_TRANSACTIONS ON; 

UPDATE T1 
SET [score] = [score]+'na' 
where (name = ‘john’); 

--if unhappy with results.. 
ROLLBACK TRANSACTION;