2016-08-05 28 views
-2

을 무시트랜잭션 내가</p> <pre><code>CREATE TABLE FakeTable (NotNullColumn INT NOT NULL); INSERT INTO FakeTable (NotNullColumn) VALUES (NULL); </code></pre> <p>같은이있는 경우 다음 분명히 내가 오류가 그래서

, 테이블 컬럼에 'NotNullColumn'NULL 값을 삽입 할 수 없습니다 '하게 할 수 있나요 Merchant_BizarroNordstrom.dbo.FakeTable '; 열에 null이 허용되지 않습니다. INSERT가 실패합니다.

트랜잭션의 컨텍스트 내에서, 일시적으로, 즉 방법이 있는지 궁금 해요, 그것을 만들 그래서 오류보다는 일이 아무것도에 NOT NULL 제약 결과 컬럼에 NULL를 삽입.

실생활의 문제가 궁금하다면 거대한 쿼리를 읽고 읽고 디버깅하는 데 시간을 낭비하지 않으므로 빠른 수정을 적용하고 싶습니다. 블록을시켜 try..catch 사용

+0

실제 테이블로 직접 이동하는 대신 임시 테이블을 사용할 수 있습니까? – mrtig

+1

'NOT NULL' 제약 조건은 이유가있을 수 있습니다. 참조 무결성으로 인해 이 문제를 해킹하는 것이 현명한 방법입니까? –

+0

이것은 몇 시간 만에 단일 사용자로부터 두 번째로 잘못 문서화되고 설명 된 질문입니다. 남용으로보고하고 SO 커뮤니티를 모욕하지 않는 질문으로 넘어갈 것을 권장합니다. –

답변

4

사용 된 try..catch 블록

뭔가 같은 ....

BEGIN TRY 
    BEGIN TRANSACTION 
     INSERT INTO FakeTable (NotNullColumn) VALUES (NULL); 
    COMMIT TRANSACTION 
END TRY 

BEGIN CATCH 
    IF (@@TRANCOUNT > 0) 
     ROLLBACK TRANSACTION 
    PRINT 'Do something or nothing here' 

END CATCH 

당신에게 뭔가 잘못되면 오류가 발생할 때의 제어 할 수 있습니다.

null 값을 삽입 할 수 없으므로 Try 블록에서 컨트롤이 Catch 블록으로 점프합니다. 여기에서 명시 적으로 오류를 발생 시키거나 아무 것도 수행하지 않습니다.

내가 생각하는 당신의 코멘트를 읽은 후 편집

대신 삽입 트리거의 필요합니다. 뭔가가 ....

CREATE TRIGGER insert_Into_FakeTable 
ON FakeTable 
INSTEAD OF INSERT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    INSERT INTO FakeTable (NotNullColumn) 
    SELECT NotNullColumn 
    FROM inserted 
    WHERE NotNullColumn IS NOT NULL 

END 

실제 Insert 문 대신 트리거가 발생하고 null이 아닌 값만 삽입됩니다.

+0

하지만 null 삽입에 대해서만 아무것도하고 싶지 않습니다. 예를 들어, 만약'INSERT INTO FakeTable (NotNullColumn) VALUES (NULL, 5); '이라면 나는 여전히 5를 삽입하고 싶습니다. –

-1

하지만 null 삽입에 대해서만 아무것도하고 싶지 않습니다. 예를 들어, 에 INSERT INTO FakeTable (NotNullColumn) VALUES (NULL, 5)가있는 경우; 그때 나는 여전히 5가 삽입되기를 원합니다.

INSERT INTO FakeTable (NotNullColumn, othercolumn) VALUES (ISNULL(@VAL_THAT_MIGHT_BE_NULL,''), 5); 

이 당신의 REQ 처리됩니다. 물론 NULL 값을 빈 문자열로 변환하고 응용 프로그램에서이 값을 처리 할 수 ​​있어야한다는 것은 말할 필요도 없습니다. 응용 프로그램에서 빈 문자열을 예상하지 않으면이 작동하지 않습니다.

+1

남자 downvotes .... 설명해 주시기 바랍니다 그래서 내가/개선 답변을 제거 할 수 있습니다. Thx – objectNotFound

+0

나는 OP의 질문을 오해했다고 생각합니다. 당신의 변론에서 인용 한 OP의 코멘트는 오해의 소지가 있습니다. OP가 의미하는 바는 다음과 같습니다. * 다음 두 insert 문이있는 경우 : insert into fakeTable (null); insert into fakeTable (5); 첫 번째 삽입에서 오류가 발생하는 대신 두 번째 명령문이 성공할 수 있도록 무시해야합니다. * 희망 사항이 없어집니다. 그럼 다시, 나는 너무 잘못 될 수 있습니다 :) – sstan

+1

@ 스탄 축은 의미가 있지만 나는 OP가 나타나서 설명하기를 기다릴 것입니다 ... thx – objectNotFound

관련 문제