9

適切なメッセージを作成するために、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

他の方法はありますか?私の知識と参考のために知りたいです。ありがとう。

4

4 に答える 4

20

チェックアウトしました@@ROWCOUNTか?あなたが探しているものかもしれません (詳細については、http ://technet.microsoft.com/en-us/library/ms187316.aspx を参照してください)。基本的に、最後のステートメントの影響を受けた行数を返します。「成功」しなければ、ゼロ行になると思います。

于 2013-10-02T19:54:12.400 に答える
1

try catch ブロックを使用して、成功または失敗をテーブルに記録できます。

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
于 2013-10-02T19:54:33.380 に答える
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 を参照してください。

于 2013-10-02T20:08:54.650 に答える