이것은 나의 첫 번째 게시물입니다! 나를 참아주십시오. SQL Server에서 처리하는 방법을 이해하려고하는 업데이트 문이 있습니다.업데이트 테이블 설정 필드
UPDATE a
SET a.vField3 = b.vField3
FROM tableName a
INNER JOIN tableName b on a.vField1 = b.vField1
AND b.nField2 = a.nField2 – 1
가장 간단한 형식의 쿼리입니다.
vField1 is a Varchar
nField2 is an int (autonumber)
vField3 is a Varchar
나는 WHERE 절을 남겨 두었으므로 그렇지 않은 경우 논리가 있다는 것을 이해해야합니다.
vField1은 고객 번호이고 고객은 3 개의 레코드가 있다고 말하십시오. nField2의 값은 1, 2 및 3입니다. 업데이트가 a.nField2 = 1에 관해서 더 a.nField2이없는 경우 vField3는 상태
-1 때문에 업데이트 a.nField2 = 2, b.nField2 = 1 에 관해서는 을 계속하는 경우 업데이트는 a.nField2 = 3, b.nField2 = 2
입니다. 업데이트가 a.nField2 = 2 일 때, 별칭 b는 이전 줄의 내용 (b.nField2 = 1)을 반영합니다. 그리고 SET 업데이트가 a.nField2 = 3 일 때 a.vField3 = b.vField3의 대 Varchar 값은
, 별명 b를 (해야) 라인에 이전 (b.nField2 = 2) 그리고 무엇 반영 a.vField3 = b.vField3의 Varchar 값을 설정하십시오.
프로세스가 완료되면 두 번째 레코드의 두 번째 레코드가 예상대로 나타납니다. 두 번째 레코드의 vField3 값이 vField3의 값을 첫 번째 레코드
에 반영합니다그러나 세 번째 레코드의 vField3은 두 번째 레코드의 vField3 값을 반영하지 않습니다.
저는 이것이 SQL Server가 일종의 트랜잭션을 생성 한 다음 업데이트를 수행하고 있음을 보여줍니다.
질문 : 각 거래가 끝날 때마다 DB를 업데이트하여 각 거래가 생성 한 값을 참조하려면 어떻게해야합니까?
감사합니다. davlyo
"그러나 세 번째 레코드의 vField3은 두 번째 레코드의 vField3 값을 반영하지 않습니다." 너는 무엇을 얻 느냐? 두 번째 레코드의 새 값이나 원래 값을 의미합니까? – mdma
논리적 인 설정 작업보다는 커서의 관점에서 완전히 잘못된 각도에서 생각해 보았습니다. 책을 읽고 차이점을 찾아 보았지만 걱정하지 마십시오. SQL을 처음 다루는 프로그래머에게는 매우 흔한 함정입니다 시각. – Cruachan
"tablename a"와 "tablename b"는 실제로 2 개의 다른 테이블이고 서로 다른 별칭을 가진 하나의 테이블이 아니라고 가정합니다. (이것은 자기 조인과 무의미한 것입니다.) – BradC