[SQL] 어떻게 오류 메시지의 실제 저장 프로 시저의 줄 번호를받을 수 있나요?
SQL어떻게 오류 메시지의 실제 저장 프로 시저의 줄 번호를받을 수 있나요?
나는 SQL Server를 사용하고 오류가있을 경우, 오류 메시지가 저장 프로 시저의 줄 번호에 상관 관계가없는 줄 번호를 제공합니다. 나는 차이가 공백과 코멘트에 기인하지만, 정말 가정?
어떻게 서로 행 번호를 두 세트를 관련시킬 수? 누군가가 나에게 올바른 방향으로 적어도 포인터를 줄 수 있다면 정말 감사하겠습니다.
나는 SQL 서버 2005을 사용하고 있습니다.
해결법
-
==============================
1.IIRC, 그것은 PROC 것을 만든 배치의 시작부터 계산 라인을 시작합니다. 그 수단 스크립트의 시작, 그렇지 않으면이 작성하기 전에 마지막으로 "GO"문 / ALTER PROC 문 중 하나.
IIRC, 그것은 PROC 것을 만든 배치의 시작부터 계산 라인을 시작합니다. 그 수단 스크립트의 시작, 그렇지 않으면이 작성하기 전에 마지막으로 "GO"문 / ALTER PROC 문 중 하나.
그것을 볼 수있는 쉬운 방법은 개체를 만들 때 SQL 서버가 사용하는 실제 텍스트를 당겨하는 것입니다. 텍스트 모드 (기본 키 매핑으로 CTRL-T) 및 실행에 출력을 전환
sp_helptext proc_name
복사 구문 강조 등을 얻을 수있는 스크립트 창에 결과를 붙여보고 된 오류 라인으로 이동 (I 생각 CTRL-G) 고토 라인 기능을 사용합니다.
-
==============================
2.습관 I 장소 LINENO 0 중 직접 후 내 저장 프로 시저 시작합니다. 이 경우, 제로 -이 행 번호를 다시 설정합니다. 쿼리 창에 표시된대로 오류의 줄 번호를 가지고 - 그럼 당신이 LINENO 0 빙고를 썼다 SSMS에서 행 번호에 오류 메시지가보고 한 줄 번호를 추가 할 수 있습니다.
습관 I 장소 LINENO 0 중 직접 후 내 저장 프로 시저 시작합니다. 이 경우, 제로 -이 행 번호를 다시 설정합니다. 쿼리 창에 표시된대로 오류의 줄 번호를 가지고 - 그럼 당신이 LINENO 0 빙고를 썼다 SSMS에서 행 번호에 오류 메시지가보고 한 줄 번호를 추가 할 수 있습니다.
-
==============================
3.당신은 실제 오류가 발생한 곳 캐치 블록이 아닌 경우 블록이 다음 오류 라인이보고 가져옵니다 시도 내에서 모든 코드 유효성 검사 () 캐치 블록을 사용하고 RAISERROR를 사용합니다. 나는 그것을 정리하기 위해이처럼 사용했다.
당신은 실제 오류가 발생한 곳 캐치 블록이 아닌 경우 블록이 다음 오류 라인이보고 가져옵니다 시도 내에서 모든 코드 유효성 검사 () 캐치 블록을 사용하고 RAISERROR를 사용합니다. 나는 그것을 정리하기 위해이처럼 사용했다.
BEGIN CATCH DECLARE @ErrorMessage NVARCHAR(4000); DECLARE @ErrorSeverity INT; DECLARE @ErrorState INT; SELECT @ErrorMessage = ERROR_MESSAGE() + ' occurred at Line_Number: ' + CAST(ERROR_LINE() AS VARCHAR(50)), @ErrorSeverity = ERROR_SEVERITY(), @ErrorState = ERROR_STATE(); RAISERROR (@ErrorMessage, -- Message text. @ErrorSeverity, -- Severity. @ErrorState -- State. ); END CATCH
-
==============================
4.사실이 ERROR_NUMBER ()는 아주 잘 작동합니다.
사실이 ERROR_NUMBER ()는 아주 잘 작동합니다.
다음 줄 번호 7 배치 분리기에 저장 프로 시저, 그것은 7을 추가 -이 기능은 어떤 이동 공간을 사용하지 않은 그것은 여전히 잘못된 줄 번호를 보여주고 만약 그렇다면, 마지막 GO (일괄 분리) 문에서 카운트를 시작합니다 자동으로 사용됩니다. 사용한다면 로 (int로서 ERROR_NUMBER () + 7) 캐스트를 선택 [ERROR_NUMBER는] - 당신이 원하는 답변을 얻을 것입니다.
-
==============================
5.ALL IN / Protsedures를 저장
ALL IN / Protsedures를 저장
당신은 오류가 같은 얻을 수 있습니다 :
이 수단 오류가 일괄 라인 177에 있는지. 아니 177 SQL있다. 당신은 내 경우 [7]에에 무엇을 줄 수 일괄 시작을 볼 수, 그리고 당신은 문이 무엇이 잘못되었는지 찾기 위해 행 번호에 해당 값을 추가
-
==============================
6.당신은이를 사용할 수 있습니다
당신은이를 사용할 수 있습니다
CAST(ERROR_LINE() AS VARCHAR(50))
당신은 오류 로그 테이블이 사용할 수 있도록하려는 경우 :
INSERT INTO dbo.tbname( Source, Message) VALUES ( ERROR_PROCEDURE(), '[ ERROR_SEVERITY : ' + CAST(ERROR_SEVERITY() AS VARCHAR(50)) + ' ] ' + '[ ERROR_STATE : ' + CAST(ERROR_STATE() AS VARCHAR(50)) + ' ] ' + '[ ERROR_PROCEDURE : ' + CAST(ERROR_PROCEDURE() AS VARCHAR(50)) + ' ] ' + '[ ERROR_NUMBER : ' + CAST(ERROR_NUMBER() AS VARCHAR(50)) + ' ] ' + '[ ERROR_LINE : ' + CAST(ERROR_LINE() AS VARCHAR(50)) + ' ] ' + ERROR_MESSAGE())
-
==============================
7.긴 대답 : 줄 번호가에서 카운트는이 CREATE PROCEDURE 문, 플러스 실제로는 CREATE 문을 실행하지만, GO 문 앞에있는 줄을 계산하지 않을 경우 빈 행이나 주석 행은 당신이 그 위에했을 수 ...
긴 대답 : 줄 번호가에서 카운트는이 CREATE PROCEDURE 문, 플러스 실제로는 CREATE 문을 실행하지만, GO 문 앞에있는 줄을 계산하지 않을 경우 빈 행이나 주석 행은 당신이 그 위에했을 수 ...
나는 그것이 훨씬 더 쉽게 확인에 놀러 proc 디렉토리에 저장을 발견 :
GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: <Description,,> -- ============================================= CREATE PROCEDURE ErrorTesting -- Add the parameters for the stored procedure here AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insert statements for procedure here SELECT 1/0 END GO
당신이 그것을 만든 후에는 ALTER PROCEDURE로 전환하고 효과를 볼 수있는 첫 번째 GO 문 주석의 위의 위 아래에 약간의 빈 라인을 추가 할 수 있습니다.
내가 발견 한 아주 이상한 것은 내가 같은 창 하단에 그것을 강조하고 실행하는 대신 새 쿼리 창에서 EXEC ErrorTesting를 실행해야한다고했다 ... 나는 줄 번호가 올라가고 보관 것을했을 때! 확실하지 그 일이 왜 ..
-
==============================
8.당신은 오류 메시지와 같은 catch 블록에서 오류 라인을 얻을 수 있습니다 :
당신은 오류 메시지와 같은 catch 블록에서 오류 라인을 얻을 수 있습니다 :
'Ms Sql Server Error: - ' + ERROR_MESSAGE() + ' - Error occured at: ' + CONVERT(VARCHAR(20), ERROR_LINE())
from https://stackoverflow.com/questions/4565614/how-can-i-get-the-actual-stored-procedure-line-number-from-an-error-message by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의 GROUP BY 두 개의 열 (0) | 2020.06.20 |
---|---|
[SQL] 내가 두 테이블을 함께 매핑 테이블의 이름을 지정해야합니까? [닫은] (0) | 2020.06.20 |
[SQL] VARCHAR SQL에 INT로 변환 (0) | 2020.06.20 |
[SQL] 어떻게 자신에게 로컬 SQL Server 인스턴스에 대한 관리자 액세스 권한을 부여합니까? (0) | 2020.06.20 |
[SQL] 때 대신 테이블의보기를 사용하려면? (0) | 2020.06.20 |