2012-09-26 3 views
0

SQL Server 2008에서 몇 행의 데이터를 삭제해야하는 저장 프로 시저가 있습니다. 그러나 그것을 실행할 때 실패와 -6의 값을 반환합니다.SQL Server 저장 프로 시저가 '실패'를 반환합니다.

ALTER procedure [dbo].[p_CaseFiles_Exhibits_DeleteExhibits] 
    @ExhibitID int 
, @Message nvarchar(50) output 
as 
declare @FileID int 
set @FileID = (select FileID from CaseFileExhibits where ExhibitID = @ExhibitID) 
begin transaction 
    begin try 
    delete from CaseFileExhibitMovementTracking where ExhibitID = @ExhibitID 
    delete from CaseFileExhibitAttachments where CaseFileExhibitID = @ExhibitID 
    delete from CaseFileExhibits where ExhibitID = @ExhibitID 
    delete from CaseFileExhibitPropertyLink where ExhibitID = @ExhibitID 
    update CaseFileQuickStats set ExhibitCount = ExhibitCount -1 where CaseFileID = @FileID  
    commit transaction 
    end try 
    begin catch 
    set @Message='Fail' 
    rollback transaction 
    end catch 

내가 잘못 된 것 같습니다. 당신 자신이 당신의 CATCH 블록이 추가 메시지를 확인 할 수있어

+0

죄송합니다. 그것을 바꾼 – user1084319

+0

각각의 쿼리와 함께 저장된 proc을 개별적으로 실행하여 어떤 쿼리가 실패했는지 확인하려 했습니까? 아니면 저장된 프로 시저 밖에서 각각 별도로 실행해도됩니까? – Taryn

+1

이런 종류의 "메타"정보에는 ** 태그 **를 사용해야합니다 - 지금 업데이트했습니다 –

답변

3

는 :

SELECT 
ERROR_NUMBER() AS ErrorNumber 
     ,ERROR_SEVERITY() AS ErrorSeverity 
     ,ERROR_STATE() AS ErrorState 
     ,ERROR_PROCEDURE() AS ErrorProcedure 
     ,ERROR_LINE() AS ErrorLine 
     ,ERROR_MESSAGE() AS ErrorMessage; 

당신은 SELECT가 인쇄 할 것을 변경할 수 있습니다, 그리고 당신은 결과를 볼 수 있습니다 SSMS 내에서 SP를 실행할 때 '메시지'탭에 있습니다.

외래 키 또는 가능한 방아쇠에 문제가 있다고 생각됩니다.

+0

예 고맙습니다. CaseFileExhibitLinkProperty에 외래 키 제약 조건이 있다는 것을 알았습니다. 충돌 한 후에도 작동하지 않습니다. 방금 "ExhibitID ​​= @ExhibitID"에서 첫 번째 삭제로 CaseFileExhibitPropertyLink를 삭제하면 제약 조건을 위반하지 않고 작동합니다. – user1084319

관련 문제