如何知道执行的TSQL存储过程更新

时间:2013-10-02 19:46:38

标签: sql-server tsql stored-procedures

如何检查我的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 个答案:

答案 0 :(得分:18)

你签出了@@ROWCOUNT吗?可能是您正在寻找的东西(详见:http://technet.microsoft.com/en-us/library/ms187316.aspx)。基本上它返回受最后一个语句影响的行数。我想如果它不是“成功”,它将是零行。

答案 1 :(得分:4)

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

答案 2 :(得分: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

答案 3 :(得分: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