SQL Server의 ERROR_STATE () 란 무엇이며 어떻게 사용할 수 있습니까?


13

ERROR_STATE()동일한 유형의 오류가 발생할 수있는 소스 코드의 다른 상태 / 위치를 구별하는 데 도움 이 될 수 있다고 읽었습니다 . 그러나 그것이 어떻게 유용 할 수 있는지는 분명하지 않습니다.

MSDN 상태 :

ERROR_STATE() TRY… CATCH 구문의 CATCH 블록을 실행시킨 오류의 상태 번호를 반환합니다.

실제로 어떻게 사용할 수 있습니까? 어떤 사람이 나에게 예를 줄 수 있습니까? 이 참조 기사에 제공된 것들은 나에게 잘 설명하는 데 도움이되지 않습니까?


Error_State그리고 Error_Number조합은 당신에게 오류에 대한 더 명확한 그림을 제공 할 것입니다. 다른 오류 처리 관련 기능에서보세요 여기
라빈 드라 Gullapalli

감사! 그러나 나는이 링크를 일찍 읽었습니다. MSDN에서 이에 대한 좋은 예가 제공되지 않았으므로 도움이되지 않았습니다. 그래서 제가 여기서 질문을했습니다.

답변:


9

SQL Server 오류 상태의 목적은 SQL Server 개발 팀이 코드에서 여러 장소에서 많은 오류가 발생했을 때 발생하는 정확한 장소 시스템 오류를 식별 할 수 있도록하는 것입니다.

최종 사용자 (예 : SQL Server를 사용하는 응용 프로그램 개발자)는 전달 된 상태를 유사하게 사용 RAISERROR하여 제품 지원에서 프로 시저에서 오류가 발생한 위치를 식별 할 수 있습니다.

create procedure usp_my_proc
as
if <somecondition>
  raiserror(N'Error foo and bar', 16, 0);
if <someothercondition>
  raiserror(N'Error foo and bar', 16, 1);
go

두 상태를 통해 어떤 오류가 발생했는지 나중에 구별 할 수있는 방법을 확인하십시오. '하지만 오류 메시지를 볼 수 있습니다'라고 말하기 전에 국제화라는 한 단어를 말씀 드리겠습니다.


예, 이것이 제가 찾던 것입니다 ..! :) 이제 모두 클리어! 감사합니다!
jaczjill

아주 좋은 답변입니다. 귀하의 게시물에서 얻은 지식은 다음 technet.microsoft.com/en-us/library/ms180031.aspx를
kashif

6

아니요, 오류가 발생한 위치를 찾는 데 도움이되지 않습니다. 다음은 간단한 예입니다. 0으로 나누려고하면 많은 세부 정보가 포함 된 오류 메시지가 나타납니다.

SELECT 1/0;

결과:

Msg 8134, Level 16, State 1, Line 1
Divide by zero error encountered.

State값이 1 인 이라는 것을 참조하십시오 . ERROR_STATE()이 값을 돌려줍니다. 따라서 다음을 사용하면 TRY/CATCH:

BEGIN TRY
  SELECT 1/0;
END TRY
BEGIN CATCH
  SELECT ERROR_STATE();
END CATCH

결과:

----
   1

그게 다야. 대부분의 시나리오에서는 유용하지 않습니다. 유용하다고 생각되는 특정 기능을 너무 깊이 파고 들기 전에 일반적으로 오류 처리에 대한 자세한 내용을 읽으십시오.

http://msdn.microsoft.com/en-us/library/ms175976.aspx

http://www.sommarskog.se/error_handling_2005.html


고마워, 그것은 조금 도움이되었습니다. 권한이 필요하지 않아 답변에 투표 할 수 없습니다. 그러나이 기능이 존재하는 이유를 예를 들어보고 싶었습니다. MSDN은 ERROR_STATE ()가 오류 상태 번호를 반환한다고 말하면 어떻게해야합니까!

2
@jaczjill 때로는 error_state 및 오류 처리 아키텍처의 복잡성에 따라 응용 프로그램이 특정 방식으로 응답하기를 원하지만 그와 같은 오류를 처리하는 것은 드문 것 같습니다. 오류 번호 자체 ( 특정 오류 트래핑 ) 또는 오류 심각도에 훨씬 더 일반적입니다 . 나는 누군가가 오류 상태가 존재한다는 것을 보여주는 데모를 제외하고 의미있는 방식으로 오류 상태를 사용하는 것을 본 적이 없습니다.
Aaron Bertrand

알았어, 고마워 Aaron :) 또한,이 질문에 현상금을 줄 수 있습니까? 그래서 일부 기술자는 정확한 답변을 얻기 위해 도전으로 받아들입니다. 그렇지 않으면 당신은 승자입니다.

4
네, @AaronBertrand는 정답에 맞서기 위해 많은 포인트를 마련했습니다.
Zane

2
@jaczjill Aaron보다 SQL Server에 대해 더 잘 아는 기술자는 많지 않으며 대부분 여기에 나타나지 않습니다. 그리고 귀하의 질문에 대한 답변이 여기에 있습니다 (거의 가능한 한 정확하게).
dezso

1

짧은 대답-할 수 없습니다. ERROR_STATE는 기본적으로 ERROR_NUMBER의 세분입니다. ERROR_NUMBER와 ERROR_STATE가 함께 오류의 원인을 알려주고 그 원인이 무엇인지 분명하지 않는 한 어떤 코드 행이 오류를 발생 시켰는지 알려줄 수 없습니다.


개념적으로 항상 ERROR_NUMBER () 함수와 함께 사용해야한다는 것을 이해했습니다. 그러나 ERROR_NUMBER ()를 사용한 ERROR_STATE () 사용법의 예는 그림을 완전히 명확하게합니다. 또는 좋은 참조 링크로 충분합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.