2012-05-16 4 views
0

나는 테이블 전체에서 true라는 단어의 모든 인스턴스를 찾고 '1'로 변경하려고합니다. 앞으로 시간을 절약하기 위해 한 번에 모든 열을 변경하고 하나의 쿼리 만 실행할 수 있기를 바랍니다. 내가 일을 찾고 있어요 무엇을 좀입니다한 번에 여러 필드 업데이트

update myTable set field1, field2, field3=1 where field1, field2, field3='true'

.

+2

RDBMS를 사용하고 있습니까 (예 : mySql/Oracle/etc)? – Gerrat

+0

sql server 2008 – wootscootinboogie

답변

5
update mytable 
set 
field1 = case when field1='true' then 1 else field1 end, 
field2 = case when field2='true' then 1 else field2 end, 
field3 = case when field3='true' then 1 else field3 end 
where 
    field1 ='true' or field2='true' or field3='true' 
+0

+1을 잡기 위해 – Habib

+1

@josbo, where 절은 필요하지 않습니다. – Habib

+1

ok 이제 중복되었습니다. ...하지만 ... where 절은 불필요한 업데이트를 저장합니다 ... 업데이트가 필요없는 행에 대해 –

2

현재 구문이 닫힙니다. 각 필드의 값을 지정해야합니다.

UPDATE MyTable 
SET 
    Field1 = CASE WHEN Field1 = 'True' THEN 1 ELSE Field1 END, 
    Field2 = CASE WHEN Field2 = 'True' THEN 1 ELSE Field2 END, 
    Field3 = CASE WHEN Field3 = 'True' THEN 1 ELSE Field3 END 

이렇게하면 모든 행을 검사하고 필요에 따라 해당 필드를 업데이트합니다.

+1

그는 어디에서 모두 진실을 말하지 않았는가? 오직 '1'로 참된 각각을 대체 할 수있다. – Gerrat

+0

@Gerrat - 좋은 캐치, 나는 그것을 보지 못했다. 나는 갱신 할 것이다. – JNK

+0

필드 2가 이미 0 인 경우 ... field1 = 'true'이고 필드 2 & 3이 0이면 필드 1을 "고정"하지 않습니다 –

1

아니요, 작성한대로 쉽게 할 수 없습니다.

select name from sys.columns 
    where object_id=(
    select object_id from sys.objects where name like 'myTable ' 
) 

하나 하나를 확인 : 당신이 무엇을 할 수

동적으로 사용하여 컬럼을 통해 루프입니다.

코딩이 필요하고 실행 시간이 가장 좋지는 않지만 많은 코드 작성을 피할 수 있으며 주된 이점은 이름을 변경하여 테이블을 변경할 수 있다는 것입니다.

관련 문제