[SQL] T-SQL은 : UPDATE 문에 CASE를 사용하여 조건에 따라 특정 열을 업데이트
SQLT-SQL은 : UPDATE 문에 CASE를 사용하여 조건에 따라 특정 열을 업데이트
이 모두 가능합니다 궁금하고있다. 조건에 해당하면 나는 그렇지 열 y는 업데이트 될 것입니다, 업데이트 열 X에 원하는
UPDATE table SET
(CASE (CONDITION) WHEN TRUE THEN columnx
ELSE columny
END)
= 25
나는 모든 것을 검색 몇 가지를 시도하고 해결책을 찾을 수없는 생각했다. 나는 그것이 불가능하다고 생각하지만 난 여기에 물어 사람이 전에 그것을 한 경우 볼 거라 생각 했어요. 미리 감사드립니다.
해결법
-
==============================
1.당신은 당신의 쿼리의 구조, 관련 데이터 만 변경하는 조건을 사용할 수 없습니다. 이 작업을 수행 할 수 있습니다 :
당신은 당신의 쿼리의 구조, 관련 데이터 만 변경하는 조건을 사용할 수 없습니다. 이 작업을 수행 할 수 있습니다 :
update table set columnx = (case when condition then 25 else columnx end), columny = (case when condition then columny else 25 end)
이것은 의미 적으로 동일하지만, 단지 두 열은 항상 업데이트됩니다 명심. 이것은 아마도 당신에게 어떤 문제가 발생하지 않습니다,하지만 당신은 높은 트랜잭션 볼륨이있는 경우, 다음이 동시성 문제가 발생할 수 있습니다.
당신이 요구하는지 구체적으로 할 수있는 유일한 방법은 동적 SQL을 사용하는 것입니다. 그러나 이것은 뭔가 내가 멀리하는 것이 좋습니다 것입니다. 위의 솔루션은 거의 확실 필요하시면 충분합니다.
-
==============================
2.
UPDATE table SET columnx = CASE WHEN condition THEN 25 ELSE columnx END, columny = CASE WHEN condition THEN columny ELSE 25 END
-
==============================
3.
Case 문을 사용하여 8,018,070,777이 어디 8,018,070,999 내 ContactNo을 변경하거나 업데이트 할
update [Contacts] set contactNo=(case when contactNo=8018070777 then 8018070999 else contactNo end)
-
==============================
4.나는 이것이 아주 오래된 질문을 알고, 그러나 이것은 나를 위해 일한 :
나는 이것이 아주 오래된 질문을 알고, 그러나 이것은 나를 위해 일한 :
UPDATE TABLE SET FIELD1 = CASE WHEN FIELD1 = Condition1 THEN 'Result1' WHEN FIELD1 = Condition2 THEN 'Result2' WHEN FIELD1 = Condition3 THEN 'Result3' END;
문안 인사
-
==============================
5.나는 이것이 아주 오래된 질문 알고 고정으로 문제가 표시됩니다. 그러나 테이블이 업데이트 이벤트에 대한 데이터 로깅에 대한 트리거가 내 같은 경우에 누군가가이 문제의 원인이됩니다. 모두 열은 업데이트를 얻고 쓸모없는 항목을 만들 것입니다 기록합니다. 방법의 내가 그랬어
나는 이것이 아주 오래된 질문 알고 고정으로 문제가 표시됩니다. 그러나 테이블이 업데이트 이벤트에 대한 데이터 로깅에 대한 트리거가 내 같은 경우에 누군가가이 문제의 원인이됩니다. 모두 열은 업데이트를 얻고 쓸모없는 항목을 만들 것입니다 기록합니다. 방법의 내가 그랬어
IF (CONDITION) IS TRUE BEGIN UPDATE table SET columnx = 25 END ELSE BEGIN UPDATE table SET columny = 25 END
지금은 위의 해결과 같은 테이블에 불필요한 쓰기를하지 않는 또 다른 이점이있다.
-
==============================
6.난 당신이 다음과 같이 다른 답변을 조정하여 "원하지 않는"열을 업데이트 생략 할 수 있다고 생각합니다 : 업데이트 테이블 세트 COLUMNX = (조건 1 케이스 후 단부 25) columny = (케이스 때 조건 2 단부을 25)
난 당신이 다음과 같이 다른 답변을 조정하여 "원하지 않는"열을 업데이트 생략 할 수 있다고 생각합니다 : 업데이트 테이블 세트 COLUMNX = (조건 1 케이스 후 단부 25) columny = (케이스 때 조건 2 단부을 25)
내가 알고있는 것처럼 조건이 충족되는 경우에만 업데이트됩니다.
모든 의견을 읽은 후이 가장 효율적입니다 : 업데이트 테이블 세트 COLUMNX = 25 곳 조건 1 업데이트 테이블 세트 ColumnY = 25 곳 조건 1
샘플 테이블 : [표 DBO]을 만들. tblTest ( [ColX [INT] NULL, [ColY [INT] NULL, [ColConditional] [비트] NULL, [ID] [INT] IDENTITY (1,1) NOT NULL ) ON [PRIMARY] 샘플 데이터 : tblTest (ColX, ColY, ColConditional)에 삽입 된 값 (널, 널, 0) tblTest (ColX, ColY, ColConditional)에 삽입 된 값 (널, 널, 0) tblTest (ColX, ColY, ColConditional)에 삽입 된 값 (널, 널, 1) tblTest (ColX, ColY, ColConditional)에 삽입 된 값 (널, 널, 1) tblTest (ColX, ColY, ColConditional)의 값 (1, NULL, NULL)에 삽입 tblTest (ColX, ColY, ColConditional) 값 (2, NULL, NULL)에 삽입 tblTest (ColX, ColY, ColConditional)에 삽입 된 값 (NULL, 1, NULL) tblTest (ColX, ColY, ColConditional)에 삽입 된 값 (NULL, 2, NULL) 지금은 당신이 핸들의 널 (null)이 조건을 작성할 수 있습니다 가정합니다. 내 예를 들어, 당신이 이러한 조건을 작성한 가정입니다 true로 평가, 거짓 또는 널 그. 당신이 도움을 필요로하는 경우, 알려 주시면 최선을 다할 것입니다. 이제 코드의 두 라인을 실행하는 25 가리키고 변경 X를 수행하는 경우와 ColConditional이 25 (1) 사실과 Y 인 경우에만 경우와 ColConditional이 거짓 인 경우에만 (0) 업데이트 tblTest 설정 ColX = 25 ColConditional = 1 업데이트 tblTest 설정 ColY = 25 ColConditional = 0
추신 널의 경우는 원래의 질문이나 문제에 대한 업데이트에 언급,하지만 당신이 볼 수 있듯이,이 아주 간단한 대답은 어쨌든을 처리 않았다.
from https://stackoverflow.com/questions/4830191/t-sql-using-a-case-in-an-update-statement-to-update-certain-columns-depending-o by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 SQL 단지 하나의 필드에 중복없이 레코드를 선택하려면? (0) | 2020.06.03 |
---|---|
[SQL] ORDER BY 절은 뷰, 인라인 함수, 파생 테이블, 하위 쿼리 및 공통 테이블 표현식에서 유효하지 않습니다 (0) | 2020.06.03 |
[SQL] 어떻게 SQL Server Management Studio의 테이블에서 신속하게 편집 값? (0) | 2020.06.03 |
[SQL] MySQL의 해제 및 키 사용 (0) | 2020.06.03 |
[SQL] mysql을 / SQLSERVER에서 삭제 대 잘라야의 비교 [중복] (0) | 2020.06.03 |