在存储过程中添加自定义消息

时间:2014-11-17 12:31:13

标签: sql-server stored-procedures sql-server-2008-r2

我想根据if else条件在我的存储过程中添加一些消息,我该怎么做。问题是我有三个表团队,帐户和用户。我想删除团队表中的teamA,条件是如果没有任何帐户且用户与该团队相关。我有存储过程工作正常,但我想检查条件,并希望使用if else添加一些自定义消息。请帮助我的代码。

Create PROCEDURE sp_DeleteTeam

@pTeamId int
 AS
BEGIN

    SET NOCOUNT ON;

   update t
   set t.Deleted =1
   from Team t
   where t.TeamId = @pTeamId
   And Not Exists (Select 1 from [User] where TeamId = @pTeamId)

   And Not Exists (Select 1 from Account where TeamId = @pTeamId)
END

3 个答案:

答案 0 :(得分:2)

不要将前缀sp_用于用户存储过程,因为它是为系统过程保留的。

下面是一个使用RAISERROR返回消息的示例。如此示例中的严重性为11或更高将引发应用程序中的异常。严重性为10或更低将生成信息性消息。

CREATE PROCEDURE usp_DeleteTeam @pTeamId int
AS
    BEGIN

        SET NOCOUNT ON;
        DECLARE @Message varchar(2047);

        UPDATE  t
        SET     t.Deleted = 1
        FROM    Team t
        WHERE   t.TeamId = @pTeamId
                AND NOT EXISTS ( SELECT 1
                                 FROM   [User]
                                 WHERE  TeamId = @pTeamId )
                AND NOT EXISTS ( SELECT 1
                                 FROM   Account
                                 WHERE  TeamId = @pTeamId );

        IF @@ROWCOUNT = 0
            BEGIN
                IF NOT EXISTS ( SELECT  *
                                FROM    Team
                                WHERE   TeamId = @pTeamId )
                    BEGIN
                        SET @Message = 'does not exist in Team table';
                    END;
                IF EXISTS ( SELECT  *
                            FROM    [User]
                            WHERE   TeamId = @pTeamId )
                    BEGIN
                        SET @Message = COALESCE(@Message + ', ', '')
                            + 'already exists in User table';
                    END;
                IF EXISTS ( SELECT  *
                            FROM    Account
                            WHERE   TeamId = @pTeamId )
                    BEGIN
                        SET @Message = COALESCE(@Message + ', ', '')
                            + 'already exists in Account table';
                    END;
                SET @Message = 'Team %d: ' + @Message
                RAISERROR(@Message, 11, 0, @pTeamId);
            END;
    END;

答案 1 :(得分:1)

使用以下SP来使用打印或选择信息。

Create PROCEDURE sp_DeleteTeam

@pTeamId int
 AS
BEGIN
    SET NOCOUNT ON;

   IF ((NOT EXISTS (SELECT TOP 1 FROM [User] WHERE TeamId = @pTeamId)) AND (Not EXISTS (SELECT TOP 1 FROM Account WHERE TeamId = @pTeamId)))
   BEGIN
     UPDATE T
     SET T.Deleted = 1
     FROM Team t
     WHERE T.TeamId = @pTeamId

     SELECT 'Not exist - Table updated' AS Message
     --PRINT 'Not exist - Table updated'
   END
  ELSE 
  BEGIN
    SELECT 'Already exist - Table not updated.' AS Message
    --PRINT 'Already exist - Table not updated.'
  END
END

答案 2 :(得分:0)

据我所知,你只想看看它是否成功执行。如果正在调用存储过程在某些Applciation中,最后,将select语句作为

SELECT 'Your message' AS Message

然后在应用程序中将结果存储在数据集中并检索您的消息,

如果您未在任何应用程序中使用它,请使用

print 'your message'

OR可能会尝试更具体,并清楚地阐述您的问题。