UPSERT 개념과 유사한 T-SQL 명령이 발생했는지 궁금합니다. 옵션 (1) 또는 (2)를 사용하여 INSERT | UPDATE 작업을 수행하면 지나치게 복잡하고 오류가 발생하기 쉽습니다.
객관적인
원하는 레코드 (이 경우 employee_id 1)가 동일한 쿼리를 기본적으로 두 번 작성하지 않고도 최신 상태로 유지합니다.
문맥
- 테이블 이름 : 직원
- 직원 ID : 기본 키가 있으며 ID 속성이 true로 설정됩니다.
옵션
SQL UPDATE 실행 ... @@ rowcount = 0 확인 및 @@ error = 0 ... 필요한 경우 SQL INSERT 실행
- con : 효과적으로 같은 쿼리를 삽입으로 한 번, 업데이트로 한 번 작성해야합니다.
- 죄수 : 더 많은 코드 = 더 많은 시간 입력
- 죄수 : 더 많은 코드 = 더 많은 오류 공간
/programming/1106717/how-to-implement-a-conditional-upsert-stored-procedure "@@ rowcount를 사용하여 업데이트"
- SQL MERGE를 실행
- con : 효과적으로 같은 쿼리를 삽입으로 한 번, 업데이트로 한 번 작성해야합니다.
- 죄수 : 더 많은 코드 = 더 많은 시간 입력
- 죄수 : 더 많은 코드 = 더 많은 오류 공간
http://technet.microsoft.com/en-us/library/bb510625.aspx "T-SQL 병합"
- SQL UPSERT 실행 (기능이 존재하지 않음)
- pro : 데이터와 테이블의 관계를 한 번만 정의합니다 (SQL Server가 INSERT인지 UPDATE인지에 대해 걱정하도록합니다)
- 찬성 : 적은 코드 = 빠른 구현
- 찬성 : 적은 코드 = 낮은 확률
UPSERT 예
UPSERT 직원 (employee_id, employee_number, job_title, first_name, middle_name, surname, modified_at) 값 (1, '00 -124AB37 ','Manager ','John ','T ','Smith ', GetDate ());
- employee_id 1이 존재하지 않는 경우 : MS SQL이 INSERT 문을 실행합니다.
- employee_id 1이 존재하는 경우 : MS SQL이 실행되고 UPDATE 문
MERGE
에는 간단하고 유연하며 SQL 표준의 일부이기도합니다. 실제 구현 MERGE
및 기타 UPSERT
구현의 문제점 은 잠재적 인 잠금 에스컬레이션 또는 심지어 교착 상태와도 관련이 있으며 구문과는 관련이 없습니다.
MERGE
SQL Server 구현에 대한 열광 입니다.