문제

데이터베이스에서 기존 행을 업데이트하거나없는 경우 삽입 해야하는 클래식 삽입/업데이트 시나리오를 수행하려고합니다.

나는 찾았다 주제에 대한 이전 질문, 그러나 사용하지 않는 저장된 절차를 다룹니다. 더 나은 것이없는 한 일반 SQL Select, Insert 및 업데이트 문을 사용하고 싶습니다 (SQL Server 2005에서는 Merge 문을 사용할 수 없음).

내 일반적인 생각은 다음과 같습니다.

If the row is found
  update
else
  insert

행의 존재를 확인하는 데있어 업데이트 또는 삽입물을 호출하기 전에 선택한 명세서를 수행하는 데 얼마나 저렴합니까? 아니면 업데이트를 시도하고 영향을받는 행 수를 확인한 다음 영향을받는 행이 0 인 경우 삽입을 수행하는 것이 좋습니다.

도움이 되었습니까?

해결책

가장 효율적인 방법은 UPDATE, 그런 다음하십시오 INSERT 만약에 @@rowcount 0, 이 이전 답변에서 설명한 바와 같이.

다른 팁

(우선 - 강한 이유가 없다면 저장된 절차를 피하려고하지 않을 것입니다. 대부분의 경우 좋은 혜택을줍니다.)

이런 식으로 할 수 있습니다.

  • (임시) 테이블을 만듭니다
  • 줄을 채우십시오
  • 넓은 행을 식별하는 교차점을 실행하십시오
  • 그들과 함께 테이블을 업데이트하십시오
  • 새 행을 식별하는 것을 제외하고는 실행하십시오
  • 이 요소와 함께 인서트를 실행하십시오
  • (임시) 테이블을 드롭/지우십시오

많은 양의 행을 삽입/업데이트하는 경우 이것은 아마도 더 빨리 실행될 것입니다.

귀하의 게시물이 "SQL Server 2005"라는 제목이라는 것을 완전히 이해하지만 IF/SQL 2008로 업그레이드 할 때 기대할 수있는 것을 버리고 싶었습니다. Microsoft 그것은 업데이트 및 삽입물을 모두 수행합니다. 꽤 멋지다. 아직 성능과 I/O를 비교하지는 않았지만 도구 상자에 다른 도구를 두는 것이 좋습니다.

항상 갈 경우 :
* 행을 계산하십시오
* 결과를 기반으로 삽입 / 업데이트

대신 왜 :
* 행 삭제
* 행을 삽입하십시오

같은 결과와 깔끔한.
행을 업데이트 할 때 아는 한 -SQLServer는 삭제 / 삽입을 수행합니다 (존재하는 위치)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top