2017-10-09 5 views
-1

열에 update 문을 사용했는데 이제는이를 취소하고 싶습니다. 이 작업을 실행 취소 할 수있는 방법이 있습니까?SQL Server의 업데이트 기능을 어떻게 취소 할 수 있습니까?

이 원본 데이터 I이 쿼리를 사용

Name Score 
John 15 
John 15 

입니다 :

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

저에게이 준 :

Name Score 
John 15na 
John 15na 

나는이를 취소하고 na를 제거 할 수 있습니까? 나는 점수를 부동으로하고 싶다. 추가 na을 제거하여

+2

'롤백'을 시도 했습니까? –

+0

아직 예제가 있습니까? – luanstat

+0

나는 단지 당신이'SQL'을 안다는 것에 대해 반대한다. 모든 DBS에는 데이터 변경을 영구히 유지하고 마지막 커밋 이후 모든 변경 사항의 UNDO를 만드는'commit'과 같은 것이 있습니다 (일부 명령문은 자동 커밋을 만듭니다). –

답변

4

취소를 :

당신은 하나 TT로 할 수
UPDATE T1 
SET [score] = LEFT([score],LEN([score])-2) 
where (name = 'john') 
+0

@justiceorjustus 좋은 지적이지만, 문자열에서 'na'를 제거하는 AFAICT는 VARCHAR 필드에 포함되어 있어도 부동 문자로 만들어야합니다. OP가 실제로 열을 FLOAT 유형으로 만들고 싶지는 않습니다. 그가하는 경우, 나는 그저 할 일을 추가 할 것입니다. –

1

. 수동으로 원래 값을 언급하고 업데이트했습니다 (ROLLBACK). IMPLICIT_TRANSACTIONS이 켜짐으로 설정된 경우 ROLLBACK TRANSACTION;을 실행하여 ROLLBACK을 수행 할 수 있습니다. EXPLICIT_TRANSACTIONS이 다음에 설정되어 그러나 경우에 당신은 ... BEGIN TRANSACTION과 같이 지정하면 BEGIN TRANSACTION 모든 시간을 지정하지 않고 ROLLBACK하고자하는 경우 이미없는 경우에

BEGIN TRANSACTION; 

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

--if unhappy with results.. 
ROLLBACK TRANSACTION; 

또는 설정 IMPLICIT_TRANSACTIONS해야합니다.

SET IMPLICIT_TRANSACTIONS ON; 

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

--if unhappy with results.. 
ROLLBACK TRANSACTION;