2013-10-02 23 views
6

Jak mogę sprawdzić, czy moja procedura składowana TSQL zaktualizowana w ramach procedury przechowywanej w celu utworzenia prawidłowego komunikatu?Jak poznać aktualizację procedury przechowywanej TSQL Wykonano

Przykład:

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 

Jakie są sposoby, aby sprawdzić, czy sukces bez ponownie stosując parametry?

To, co obecnie używać:

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

Czy są jakieś inne sposoby? Chcę wiedzieć za moją wiedzę i referencje. Dzięki.

Odpowiedz

16

Czy wymeldowałeś się @@ROWCOUNT? Może być tym, czego szukasz (szczegóły: http://technet.microsoft.com/en-us/library/ms187316.aspx). Zasadniczo zwraca liczbę wierszy, których dotyczy ostatnia instrukcja. Wyobrażam sobie, że gdyby nie "sukces", byłby to zero rzędów.

+1

+1, ale można też użyć 'IF EXISTS (SELECT 1 Z database.dbo.user gdzie id = @id i status = @status)', która jest lepiej niż 'count (*) "inna metoda byłaby być klauzulą ​​"WYJŚCIA" do przechwytywania danych do zmiennej tabeli @temp. –

+1

@roryap Tak, lub jeśli @@ ROWCOUNT <> [x] (gdzie x oznacza liczbę wartości, które chcesz zaktualizować), możesz rzucić błąd lub wycofać transakcję, dając ci możliwość dokładnego określenia liczby wiersze, które chcesz zaktualizować, jeśli są więcej niż jeden. – Question3CPO

1

Możesz użyć bloku catch catch i zalogować sukces lub porażkę tabeli.

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

użyłbym @@ERROR zmiennej systemowej, aby sprawdzić, czy ostatnie zdanie powiodła (Error # = 0), czy nie (błąd #> 0):

USE Database; 
GO 

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

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

Można pójść głębiej Microsoft MSDN tutaj: http://technet.microsoft.com/es-es/library/ms188790.aspx

+0

@@ ERROR to stara szkoła, patrz: 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 
Powiązane problemy