2008-09-24 3 views
0

SQL Server 2000의 T-SQL에서 오류를 기록하는 데 도움이 필요합니다. 우리가 트랩하는 오류를 기록해야하지만 앞에 앉아 있었던 것과 동일한 정보를 얻는 데 어려움이 있습니다 SQL Server Management Studio.SQL Server 2000에서 오류 텍스트 검색

는이 같은 모든 인수를 대체하지 않고 메시지를 얻을 수 있습니다 :

SELECT MSG.description from master.dbo.sysmessages MSG 
INNER JOIN sys.syslanguages LANG ON MSG.msglangID=LANG.msglangid 
WHERE [email protected] AND [email protected]@LANGID 

하지만 오류 인자를 알아내는 어떤 방법을 발견하지 않았습니다. 내가보고 싶어 : 테이블에

제약 조건 위반 MYCONSTRAINT2을 MYTABLE7

하지

만 관리자 권한을 필요로 DBCC OUTPUTBUFFER를 사용하여 이국적인 계획을 돌았 다 테이블 %의

인터넷 검색에

제약 조건 위반 % s의 생산 코드에 적합하지 않습니다. 인수 교체로 오류 메시지를 어떻게받을 수 있습니까?

답변

0

곧 SQL2005로 업그레이드 할 예정입니까? 그렇다면 TRY/CATCH 모델을 활용하여 자신이하려는 일을보다 쉽게 ​​달성 할 수 있습니다. 캐치에 노출

변수는 등, 이메일을 보내,에서

+0

2005 년으로 업그레이드하고 싶습니다. 그것은 나의 첫 번째 선택이지만 내 통제는 아닙니다. – Clyde

2

그것을 기록 할 수 있습니다, 거기에서 당신에게 등 오류를 던지는 개체, 줄 번호, 오류 메시지, 심각도를 제공 할 수 있습니다. 인터넷, SQL 서버에서 (인쇄 또는 RAISERROR에서 아무것도 출력) 오류 메시지를 검색하면도록 SqlConnection에 하나 개의 속성을 설정하는 것만 큼 간단 (.FireInfoMessageEventOnUserErrors = 진정한)과 연결의 InfoMessage 이벤트를 처리. .Net에서받은 데이터는 SQL Server Management Studio 결과 표에있는 Messages 창과 일치합니다.

모든 코드는 이벤트를 처리하는 함수에 들어갑니다. 모든 코드가 동일한 메서드를 가리 키도록 추상화 할 수 있으므로 나머지 두 줄을 제외하고 나머지는 변경할 수 없습니다. 코드는 속성 및 이벤트 설정하는 새로운 연결을 생성 (을하고 당신은 바로, 한 곳에서 할 필요가 있으므로 멀리 추출하는 것이 있나요?) 여기

내가 definitive error guide for SQL Server을 고려 무엇에 대한 링크입니다.
http://www.sommarskog.se/error-handling-I.html

경우에 따라 SQL Server는 오류가 발생해도 처리를 계속합니다. 이전 링크의 What Happens when an Error Occurs?이라는 제목을 참조하십시오. 다음과 같이

RAISERROR ({ msg_id | msg_str } { , severity , state } 
    [ , argument [ ,...n ] ]) 
    [ WITH option [ ,...n ] ] 

및 오류 인수입니다 : RAISERROR에 대한 온라인, 책

+0

클라이언트 시스템은 ASP.NET 웹 서비스입니다. 예외에서 오류 메시지가 정상적으로 표시됩니까? 어쨌든, 나는 여전히 TSQL에서 이것을하고 싶습니다. 1, 그것은 오류 처리를 재구성하는 애플 리케이션의 주요 재 작업 것입니다. – Clyde

+0

... 및 2, 프로 시저의 중간에 오류가 기록되어야하지만 오류가 프로 시저를 완전히 실패해야하는 경우는 아닙니다. .NET Sql 구성 요소가 오류 메시지를 생성 할 수 있다면 그 정보가 실제로 TSQL에서 사용 가능함을 의미합니까? – Clyde

+0

귀하의 질문에 대한 답변을 편집 중입니다. 그러나 SO가 귀하에게 내가 여기에 게시한다는 통지를 보내지 않기 때문에. –

1

봐는 (설명 참조) 당신은 구문을 찾을 수

은 다음과 같습니다

d or I Signed integer 
o Unsigned octal 
p Pointer 
s String 
u Unsigned integer 
x or X Unsigned hexadecimal 

VB 이후의 모든 언어는이를 포착하고 적절한 조치를 취할 수있는 능력이 있습니다.

데이브 J

+0

나는 그가 응용 프로그램의 클라이언트 측 대신 Transact-SQL에서 (또는 다른 말로하면 서버 측에서)이를 얻고 자한다고 생각합니다. –

0

FORMATMESSAGE 위처럼 sysmessages의 템플릿에서 최종 형식으로 메시지를 작성할 수 있습니다 (그것은 또한 SQL Server 2000에서 존재).

그러나 RAISERROR 명령 (오류가 발생하면 데이터베이스 엔진 자체가 내부적으로 호출하는 용도)은 이미 클라이언트에 트래핑되고 기록 될 수있는 완성 된 텍스트를 보냅니다. SSMS는 클라이언트이며 자체 메시지를 생성하지 않습니다. 모든 메시지는 데이터베이스 엔진에서 가져옵니다.

그러나 T-SQL을 사용하여 T-SQL 오류를 기록하려고합니다. 솔직히 SQL Server 2000에서는 불가능합니다. 너무 많은 오류가 발생하면 일괄 처리 및 범위가 중단되어 안정적으로 아무것도 기록하지 않습니다.

TRY/CATCH/ERROR_MESSAGE를 사용하려면 SQL Server 2005를 사용해야하며, 그렇지 않으면 클라이언트에서 트랩 한 다음 log4net과 같은 것을 사용하여 SQL Server에 다시 로그온하십시오.

관련 문제