2013-08-26 5 views
0

저장 프로 시저에서 SQL 스크립트를 실행하는 것과 관련된 오류를 트래핑 할 수있는 방법에 대한 도움이 필요합니다.저장 프로 시저 내에서 sql 스크립트를 실행하는 데 도움이 필요

select sopScript 
from M_SopInsert 
where soptype = @soptype and sopnumbe = @sopnumbe and lnitmseq = @lnitmseq 

If result_count > 0 //if result from above sql query is >0 

exec sopScript //loop through the record set and execute sopscript for every record. 

참고 : 질문 원래

update customerMaster 
set custname='abc' 
where custid=100`" 
+0

(http://technet.microsoft를이 [기사]을 확인하시기 바랍니다 : 그런 다음 TRY

DECLARE @lRollback bit=0 DECLARE @ErrTable TABLE (ErrNumber int,ErrSeverity int,ErrProc varchar(MAX),ErrLine int,ErrMsg varchar(MAX)) --table variable to collect errors. BEGIN TRY -- outside begin try BEGIN TRANSACTION -- wrap transaction .... BEGIN TRY ... END TRY BEGIN CATCH {ERROR CATCH - see below} END CATCH END TRY BEGIN CATCH SET @lRollback=1 {ERROR CATCH - see below} ROLLBACK BEGIN TRY INSERT INTO errorTable (importId,errNumber,errSeverity,errProc,errLine,errMsg) --This is the db default error collection table SELECT DISTINCT @importId,ErrNumber,ErrSeverity,ErrProc,ErrLine,ErrMsg FROM @ErrTable END TRY RETURN -1 END CATCH 

언제의 개별 실행은이 ERROR CATCH 사용 절차에서 오류를 잡으려고합니다. com/ko-kr/library/aa175920 % 28v = sql.80 % 29.aspx) –

+0

커서를 작성하는 방법에 대한 예제가 있습니까? – davids

+0

SQL 커서에 대한이 기사를 읽으십시오. http://technet.microsoft.com/en-us/library/ms180169.aspx – davids

답변

0

오해 : sopscript 여기에 같은 스크립트가 포함되어 있습니다.

이 우리가 어떻게입니다

declare @sopScript varchar(1000) 

select sopScript 
into #ControlTbl 
from M_SopInsert 
where soptype = @soptype and sopnumbe = @sopnumbe and lnitmseq = @lnitmseq 


while exists (select * from #ControlTbl) 
begin 

    select top 1 @sopScript = sopScript 
    from #ControlTbl 

    begin try 
     exec executesql @sopScript = sopScript 
    end try 
    begin catch 
     *do something* 
    end catch 

    delete from #ControlTbl 
    where sopScript = @sopScript 

end 
+0

결과 집합을 반복하고 모든 오류를 캡처하여 모든 레코드에 대해 sopscript를 실행해야합니다. 또한 "톱 1"에 대해 언급 한 것 같습니다. – Anirudh

+0

편집 해 주셔서 감사합니다. 'n'레코드를 어떻게 루프합니까? 또한 나는 catch의 예와 오류를 제어 할 수있는 방법에 더 관심이 있습니다. sopScript는 SQL 스크립트이므로, 좋은 SQL 스크립트인지, 실행될 때 오류가 있는지 확인하고 싶습니다. – Anirudh

+0

오류 처리 방법은 귀하에게 달려 있습니다. 대부분의 로그는 별도의 테이블 또는 경고 연산자 ... 등. 또는 실행하기 전에 스크립트를 미리 검증하려고합니까? –

2

사용해보십시오 : TRYTRANSACTION A의

랩 절차의 단계를.

INSERT INTO @ErrTable (ErrNumber,ErrSeverity,ErrProc,ErrLine,ErrMsg) 
SELECT 
    ERROR_NUMBER() AS ErrorNumber 
    ,ERROR_SEVERITY() AS ErrorSeverity 
    ,ERROR_PROCEDURE() AS ErrorProcedure 
    ,ERROR_LINE() AS ErrorLine 
    ,ERROR_MESSAGE() AS ErrorMessage;