2011-06-15 7 views

답변

1

을 선택 (WHERE COL1 = @Value TableA의 SELECT * FROM) 의뢰.

Create Proc Testing 
as 
Set NoCount ON 
Set XACT_ABORT ON 

Begin Try 
    Begin Tran 
    IF Not Exists(SELECT 1 FROM Table2 i JOIN Table1 t ON i.key = t.key) 
    Begin 
     //Your insert statement 
    END 
    Commit Tran 
End Try 

Begin Catch 
    Rollback Tran 
End Catch 
+0

이것은 정확하게 질문에 대답하지 않습니다. 이 값이 BOTH 테이블에 있는지 확인합니다. 질문은'Table2'에 삽입하기 전에'Table1'에 있는지 확인하는 방법이었습니다. 값이'Table1'에만 존재하면 코드가 삽입을 허용합니다. – NullRef

-1

아마도 INSERT trigger을 사용하고 있을까요?

구문에 대해 잘 모르겠습니다.

CREATE TRIGGER InsertTableTrigger ON Table1 FOR INSERT 
AS 
    BEGIN 
    IF EXISTS (SELECT 1 FROM Inserted i JOIN Table1 t ON i.key = t.key) 
    BEGIN 
     RAISERROR('Transaction Failed.',16,1) 
     ROLLBACK TRAN "insert on Table1" 
    END 
    END 
GO 

삽입 값은 삽입 값에 액세스하는 데 사용됩니다. NOT이있는 경우

+0

삽입 값은 어떻게 사용합니까? – user194076

+0

이 답변을 업데이트했습니다. 삽입 된 값을 사용하여 액세스합니다. – Lobo

+2

일괄 레코드 100 개를 삽입한다고 가정합니다. 100 명 중 이미 40 명이 다른 테이블에 있고 60 명이 새로운 테이블입니다. 위의 성명에 따라, 그것은 전체 배치를 롤백해야합니다 !! – Pankaj

1

INSERT INTO TableB의 (COL1) @Value

내가 먼저 각에 삽입 될 예정이다 기록을 확인해야하는 것이 좋습니다
+0

저는 스타 대신 컬럼 이름을 언급하는 것이 더 낫다고 생각합니다. – Pankaj

+0

몇 년 전에 SQL 2005부터 옵티마이 저가 EXISTS 문 안에있는 경우 *, 1 또는 열 이름을 동일하게 취급한다는 기사를 보았습니다. 나는 그들을 여러 번 비교했고 실행 계획은 정확했다. – Natalia

관련 문제