2013-10-02 15 views
6

Come posso verificare se la mia stored procedure TSQL è stata aggiornata all'interno della stored procedure per creare un messaggio corretto?Come conoscere Aggiornamento stored procedure TSQL eseguito

Esempio:

ALTER PROCEDURE [dbo].[pUpdate] 
      @id uniqueidentifier, 
      @status int, 
      @message VARCHAR(100) OUTPUT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    UPDATE [database].[dbo].[user] 
    SET status = @status 
    WHERE Id = @id 
END 

IF (SUCCESSFUL) 
BEGIN 
    @message = 'Success!' 
END 

Quali sono alcuni possibili modi per controllare in caso di successo senza utilizzare nuovamente i parametri?

Questo è quello che ho attualmente in uso:

SELECT COUNT(*) 
    WHERE status = @status AND id = @id 

ci sono altri modi? Voglio sapere per la mia conoscenza e riferimento. Grazie.

risposta

16

Avete controllato @@ROWCOUNT? Potrebbe essere quello che stai cercando (vedi questo per i dettagli: http://technet.microsoft.com/en-us/library/ms187316.aspx). Fondamentalmente restituisce il numero di righe interessate dall'ultima istruzione. Immagino che se non fosse "riuscito", sarebbe zero righe.

+1

+1, ma si potrebbe anche usare 'IF EXISTS (SELECT 1 FROM WHERE database.dbo.user Id = @id e STATUS = @status)', che è il modo migliore di 'COUNT (*) 'un altro metodo sarebbe essere la clausola 'OUTPUT' per acquisire i dati in una variabile di tabella @temp. –

+1

@roryap Sì, o se @@ ROWCOUNT <> [x] (con x è il numero di valori che si desidera aggiornare), è possibile generare un errore o eseguire il rollback della transazione, dandoti la possibilità di specificare esattamente quanti righe che vuoi aggiornare, se più di una. – Question3CPO

1

È possibile utilizzare un blocco catch try e registrare il successo o l'errore su una tabella.

BEGIN TRY 
    BEGIN TRANSACTION 
    -- Add Your Code Here 
    -- Log Success to a log table 
    COMMIT 
END TRY 
BEGIN CATCH 
    -- Log failure to a log table 
    ROLLBACK 
END CATCH 
0

userei variabile di sistema @@ERROR per verificare se l'ultima frase era successo (errore # = 0) oppure no (errore #> 0):

USE Database; 
GO 

BEGIN 
    UPDATE TableName 
    SET ColumnA = 4 
    WHERE ColumnB = 1; 
END 

IF (@@ERROR = 0) 
BEGIN 
    PRINT N'Successfull Update'; 
    GO 
END 

si può andare più in profondità Microsoft MSDN qui: http://technet.microsoft.com/es-es/library/ms188790.aspx

+0

@@ ERROR è vecchia scuola, consultare: http://stackoverflow.com/a/1111550/65223 –

1
ALTER PROCEDURE [dbo].[pUpdate] 
      @id uniqueidentifier, 
      @status int, 
      @message VARCHAR(100) OUTPUT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    UPDATE [database].[dbo].[user] 
    SET status = @status 
    WHERE Id = @id 
END 

IF (@@ROWCOUNT > 0) 
BEGIN 
    @message = 'Success!' 
END 
ELSE 
BEGIN 
    @message = 'Not success!' 
END 
Problemi correlati