2012-09-28 6 views
1

이 업데이트는 ID가 동일하므로 실패합니다.@@ 오류 - TSQL에서 처리/평가하는 방법?

하지만 직접적인 오류 메시지가 나타납니다.
PRINT 문 중 하나가 표시되지 않습니다.

@@ ERROR는 어떻게 사용합니까?
SSMS 사용.
이것을 스크립트 또는 쿼리라고 부릅니까?

PRINT 'start'; 
DECLARE @ErrorVal INT; 
UPDATE IndenText SET ID = 7; 
SELECT @ErrorVal = @@ERROR; 
PRINT @ErrorVal; 
IF @ErrorVal <> 0 
BEGIN 
    PRINT N'A error caught.'; 
END 
PRINT 'done'; 

이것은 또한 ID 열 'ID'를 업데이트 할 수 없습니다 I하기 저

PRINT 'start'; 
DECLARE @ErrorVal INT; 
BEGIN TRY 
    UPDATE IndenText SET ID = 7; 
    SELECT @ErrorVal = @@ERROR; 
    PRINT @ErrorVal; 
END TRY 
BEGIN CATCH 
    IF @@ERROR <> 0 
    BEGIN 
     PRINT N'A error caught.' + @@ERROR; 
    END 
END CATCH 
PRINT 'done'; 


메시지 8102, 수준 16, 상태 1, 줄 4 에서 작동하지 않습니다.

마틴이 말한 것처럼 컴파일 오류입니다.
컴파일 오류가 아닌 제약 조건을 만들었습니다.
처리 할 @@ ERROR가 있습니다.

PRINT 'start'; 
DECLARE @ErrorVal INT; 
DECLARE @newVal INT; 
select @newVal = -1; 
BEGIN TRY 
    update Twaste1 set ID = @newVal ; 
    PRINT 'End Try'; 
END TRY 
BEGIN CATCH 
    Select @ErrorVal = @@ERROR; 
    PRINT 'Begin Catch'; 
    IF @ErrorVal <> 0 
    BEGIN 
     PRINT CAST(@ErrorVal as varchar(30)); 
     PRINT N'A error caught.'; 
    END 
END CATCH 
PRINT 'done' 

;

+0

시도 잡기에 대한 답변에 동의하십시오. 배치 또는 범위 중단 오류입니다. AFAIK를 식별 할 수있는 오류 또는 범위를 중단시키는 오류에 대한 특정 논리는 없습니다. [SQL 2000의 오류 처리] (http://www.sommarskog.se/error-handling-I.html#whathappens) –

+0

실제로 편집 후 아는 것은 컴파일 타임 오류라는 것을 알고 있습니다. 이것에 대한 예상 실행 계획을 얻을 수도 없습니다. 컴파일 시간 오류는 주 스크립트를 컴파일 한 후에 문제 문을 컴파일하면 발생합니다. 대개 자식 범위에서 발생하기 때문에 발생하지만 명령문 컴파일이 지연되는 경우에도 발생할 수 있습니다. –

+0

@MartinSmith는 내가 왜 첫 번째 PRINT를 얻지 못하는지 설명합니다. 맞습니다. 실행 계획을 표시하고 예측할 수도 없습니다. 실패 할 것이지만 컴파일 오류가 아닌 것을 찾아야합니다. – Paparazzi

답변

1

대신 TRY... CATCH을 사용하는 것이 좋습니다. 그러면 캡처 된 오류를 캡처하고 검사 할 수 있습니다. 다음

:

UPDATE :

나는 이것이 원래의 질문에 자신의 의견에서 작동하지 않습니다,하지만 난 MSDN TRY... CATCH 기사에 대한 참조를 추가 할 것입니다 왜 마틴 이미 설명 믿는다

  • 같은 구문 에로 같은 오류를 컴파일 그들이 TRY ... CATCH 구조체로서 실행 동일한 수준에서 발생할 때 오류 유형은 CATCH 블록에 의해 처리되지 rs를 사용하면 일괄 처리가 실행되지 않습니다.
  • 지연 이름 확인의 이기 때문에 컴파일 후 발생하는 개체 이름 확인 오류와 같은 문 수준 재 컴파일 중에 발생하는 오류입니다. 업데이트 사용에 대한 예를 들어
+0

여전히 직접적인 오류가 발생합니다. 나는 이것을 SSMS에서 돌리고있다. – Paparazzi

2

는 :

는 @@ ERROR는 = 547 PRINT N'A 점검 제한 조건 위반이 발생
UPDATE HumanResources.EmployeePayHistory 
SET PayFrequency = 4 
WHERE BusinessEntityID = 1; 

경우 ';. GO

관련 문제