2012-09-26 4 views
0

J'ai une procédure stockée dans SQL Server 2008 qui doit supprimer quelques lignes de données. Mais quand je l'exécute, il renvoie un échec et une valeur de -6.Procédure stockée SQL Server renvoyant 'échec'

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 

Je n'arrive pas à trouver ce qui ne va pas.

+0

Désolé. Changé le – user1084319

+0

avez-vous essayé d'exécuter le proc stocké avec chaque requête individuellement pour voir quelle requête pourrait échouer? Ou même exécuter chacun séparément en dehors du proc stocké? – Taryn

+1

Vous devez utiliser le ** TAGS ** pour ce type d'information "meta" - Je l'ai mis à jour pour vous maintenant –

Répondre

3

Vous êtes en mesure de vérifier les messages vous, ajoutez à votre bloc CATCH:

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; 

Vous pouvez modifier cette SELECT à imprimer, et vous serez en mesure de voir les résultats dans l'onglet "Messages" lors de l'exécution du SP dans SSMS. Je soupçonne que c'est un problème avec une clé étrangère ou un déclencheur possible.

+0

Oui Merci beaucoup. Je savais qu'il y avait une contrainte de clé étrangère sur le CaseFileExhibitLinkProperty, et puisque je l'ai après qu'il est en conflit cela ne fonctionne pas. Je viens de mettre "delete from CaseFileExhibitPropertyLink où ExhibitID ​​= @ExhibitID" comme la première suppression alors il ne viole pas la contrainte et cela fonctionne. – user1084319