2013-10-02 4 views
6

Как проверить, обновлена ​​ли хранимая процедура TSQL в хранимой процедуре, чтобы создать правильное сообщение?Как узнать, что выполнено восстановление хранимой процедуры TSQL

Пример:

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 

Каковы возможные способы проверки в случае успеха без использования параметров снова?

Это то, что я в настоящее время используют:

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

Есть ли другие способы? Я хочу знать свои знания и рекомендации. Благодарю.

ответ

16

Вышлите из списка @@ROWCOUNT? Можете быть тем, что вы ищете (см. Это для деталей: http://technet.microsoft.com/en-us/library/ms187316.aspx). В основном это возвращает количество строк, затронутых последним оператором. Я бы предположил, что если бы он не был «успешным», это были бы нулевые строки.

+1

+1, но вы также можете использовать 'IF EXISTS (SELECT 1 FROM database.dbo.user WHERE Id = @id и статус = @status)', который намного лучше, чем 'COUNT (*) 'другой метод это предложение 'OUTPUT' для захвата данных в переменную таблицы @temp. –

+1

@roryap Да, или если @@ ROWCOUNT <> [x] (x - число значений, которое вы хотите обновить), вы можете выбросить ошибку или отменить транзакцию, предоставив вам возможность точно указать, сколько строки, которые вы хотите обновить, если несколько. – Question3CPO

1

Вы можете использовать блок catch try и регистрировать успех или неудачу таблицы.

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

Я хотел бы использовать @@ERROR системную переменную, чтобы проверить, было ли последнее предложение преуспевающим (ошибка # = 0) или нет (ошибка #> 0):

USE Database; 
GO 

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

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

Вы можете углубиться в Microsoft MSDN здесь: http://technet.microsoft.com/es-es/library/ms188790.aspx

+0

@@ ERROR - старая школа, см .: 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 
Смежные вопросы