2010-04-21 1 views
0

나는이 위치에 계속 머물러있다 :끝까지 커밋하지 않을 때 종속성을 공유하는 2 개의 SQL 테이블에 레코드를 어떻게 삽입합니까?

나는 ASP.NEt 2.0 앱을 가지고있다. SQL에서 2 개의 테이블에 삽입해야합니다. 테이블 간에는 종속성이 있습니다. 트랜잭션을 사용하여 첫 번째 레코드를 삽입합니다. 그런 다음 두 번째 테이블로 이동합니다. 그러나 첫 번째가 커밋되지 않았기 때문에 두 번째 것은 오류를 던집니다.

+1

동일한 트랜잭션 내에서 두 가지 작업을 모두 수행해야합니까? – Paddy

+0

'진짜 질문이 아닌 사람으로 닫는 투표'에 제목을 읽었습니까? ** 끝까지 커밋하지 않을 때 의존성을 공유하는 2 개의 SQL 테이블에 레코드를 삽입하는 방법 ** –

+0

같은 트랜잭션에서 두 삽입을 모두 수행하지 않습니다. 너라면, 이런 일은 일어나지 않을거야. 트랜잭션 내에서 제약 조건을 충족시키기 위해 커밋 할 필요는 없습니다. –

답변

0

저장 프로 시저를 만드는 이유는 무엇입니까? 이런 식으로 A SINGLE 트랜잭션을 사용하면 STORED PROCEDURE를 호출합니다. 먼저 STREED PROCEDURE가 호출되어 부모 테이블에 INSERT가 수행 된 다음 동일한 트랜잭션 내에서 자식 테이블에 삽입됩니다.

CREATE OR REPLACE PROCEDURE GOOFY 
IS 
BEGIN 
INSERT INTO MY_PARENT_TABLE VALUES (1111, 'ALPHA'); 
INSERT INTO MY_CHILD_TABLE VALUES (1111, 'BETA'); 
END; 
/

당신이해야 할 모든 ASP.NET 2.0에서 구피를 호출하는 것입니다 : 두 개의 인서트는 동일한 트랜잭션에 속하는, 당신은 COMMIT 또는 ROLLBACK을 결정할 수 있습니다.

1

각 테이블을 수정할 때 동일한 연결을 사용하면 안됩니다. 두 테이블에 대한 모든 변경 사항에 대해 동일한 연결과 단일 트랜잭션을 사용해보십시오. 트랜잭션에서 변경 사항을 볼 때 COMMIT 할 때까지 아무도 더티 읽기를 강제하지 않는 한 아무도 볼 수 없습니다.

관련 문제