행이 있는지 확인하고, 없으면 삽입합니다.
테이블의 행을 업데이트하는 T-SQL 저장 프로시저를 작성해야 합니다. 행이 존재하지 않으면 행을 삽입합니다. 이 모든 단계는 트랜잭션으로 래핑됩니다.
이것은 예약 시스템을 위한 것이므로 원자적이고 신뢰할 수 있어야 합니다. 트랜잭션이 커밋되고 항공편이 예약된 경우 참을 반환해야 합니다.
T-SQL을 처음 사용하는데 @@rowcount
를 어떻게 사용하는지 잘 모르겠습니다. 이것이 제가 지금까지 작성한 내용입니다. 제가 올바른 길을 가고 있는 걸까요? 여러분에게는 쉬운 문제일 것입니다.
-- BEGIN TRANSACTION (HOW TO DO?)
UPDATE Bookings
SET TicketsBooked = TicketsBooked + @TicketsToBook
WHERE FlightId = @Id AND TicketsMax < (TicketsBooked + @TicketsToBook)
-- Here I need to insert only if the row doesn't exists.
-- If the row exists but the condition TicketsMax is violated, I must not insert
-- the row and return FALSE
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO Bookings ... (omitted)
END
-- END TRANSACTION (HOW TO DO?)
-- Return TRUE (How to do?)
225
11
병합해야 함장님이요 보세요 업데이트 할 수 있는 '', ',' & 삽입하십시오 '삭제' 한 것이다.
이것은 apc® 구축상의 사용에 대한 '병합'
있는 경우 (선택 1) 를 information_schema.tables t
39, & # 39 Bookings& creditbank. T. TABLE_NAME =;)
시작한다. 드롭합니다 표 예약 end 검색하기를
기장 (테이블 만들기 아이디 (1, 1) 기본 키, 프리트리드 int 티켓스마스 int not null, 티케츠부케드 int not null ) 검색하기를
1, 0 을 삽입하십시오 기장 (티켓스마스, 티케츠부케드) 선택 2, 2 삽입하십시오 기장 (티켓스마스, 티케츠부케드) 기장 (티켓스마스, 티케츠부케드) 삽입하십시오 선택 3, 1 검색하기를
일부 * 에서 공연
그리고는.
각 항공편에 한 줄로만 탑승할 수 있나요? 그렇다면요:
최대 10개의 항공권이 있는데 20개를 예약하는 경우 새 행이 삽입되므로 이러한 방식은 항공편을 초과 예약할 수 있다고 말씀드린 것으로 가정합니다.
업다록 놋좆 홀드록 존재를 위한 테스트를 통과할 때, 힌트, 행.
/ 기본 읽기 시작 전,, pre> < < code> 커밋됨 격리 레벨을 정상입니다 /
그렇지 않으면 존재 (select from Table) 와 (업다록 놋좆 홀드록,) 라고 하자.) / 삽입하십시오 / 다른 / 업데이트하십시오 */
/ 잠급니다 커밋합니다 릴리즈됨 / 여기 있다. < /code> < /pre>;;;
업다록 잠글 수 있는 힌트를 쿼리하지 강제로 불러키지 업데이트하십시오 이미 존재하는 경우, 또는 다른 트랜잭션입니다 때까지 수정하지 못하도록 막는 행일 커밋합니다 롤백합니다.
홀드록 쿼리가 여러 다른 것을 방지할 수 있는 힌트를 docname 잠급니다 추가에는 기준에 맞는 행일 시행하십시오 금융거래 필터링합니다 때까지 또는 커밋합니다 롤백합니다.
이 놋좆 힌트 docname 행 수준 잠금 대신 기본값입니다 페이지 수준, 그래서 당신의 트랜잭션까지 세분성을 won& # 39, t 블록이어야 트랜잭션입니다 업데이트하려면 같은 페이지에 연관해제된 행뿐만 다른 것 (하지만 고려하십시오 사이의 상관 관계를 더 충돌과 증가 잠금식 오버헤드에 - 잠급니다 피해야 합니다 많은 수의 행 수준 등을 하나의 트랜잭션).
지켜보리니 http://msdn.microsoft.com/en-us/library/ms187373.aspx 자세한 내용을 확인할 수 있습니다.
참고로 전 doesn& 시작할 때 어떤 시행하십시오 잠급니다 수행됨을 제표를 있다 - 그들 실행됨을 호출, t # 39 에 대한 내성 제공하십시오 트랜잭션까지 잠급니다 시작하기 전에 뭔가 다른 곤란 합니다. 최대한 빠른 시간을 가질 수 있도록 기업의 SQL 및 팩터에서의 시도해야 합니다 잠급니다 커밋하면 대한 트랜잭션 해야한단말입니다 (올해 초 출시 인수합병 (m&a).
단, PK 는 bigint 같은 경우 행 수준 잠급니다 유효인 떨어질 수 있습니다, SQL Server 는 내부 해시 값 (다른 키 값을 해시라고 잠급니다 5월 동일한 id) 의 64 비트 계속된다.
39 m 먹어서나 내 솔루션이므로 i&. # 39, & # 39, 내 방식을 doesn& t stand if& # 39. # 39, & # 39, 또는 merge&. 내 방식을 쉽지 않다.
예를 들면 다음과 같습니다.
(1) 에서 col1 선택, col2 및 col2 @par2 @par1 타바레나미 creditbank. col1 = = 정보기술 (it) 의 값을 타바레나미 선택함 검색
(2), 존재하지 않는 @par2 @par1 선택합니다. (1) 에서 서브케리 존재하지 않을 경우 걸립니다.
(3) 에 값을 삽입물의 타바레나미 단계 (2)
난 결국 삽입하려면 조건으로 행일 있었습니다, 이미 it didn& t # 39 를 사용하여 다음과 같은 모델:
어떤 난 http://moss. dell.:
http://www.postgresql.org/message-id/87hdow4ld1.fsf@stark.xeocode.com
이것은 제가 최근에 해야만 했던 일입니다:
병합]1 기능을 사용하여 달성할 수 있습니다. 그렇지 않으면 할 수 있습니다:
다음은 전체 솔루션 (커서 구조 등). 덕분에 많은 포르쿠스 카시우스 의 '트랜스 시작합니다. '코드 (커밋합니다 위에 올렸다.
이 문제가 처음 만들 수 있는 가장 효과적인 방법을 데이터베이스 열에 고유해야
'표' 변경하십시오 table_name 고유 키 추가
'다음' t be 삽입됨 won& # 39 에 무시하시겠습니까 삽입하십시오 table_name 값은 키 / 이미 존재하는 경우, 그 결과 복제본임을 한 표.