如果表不存在,如何防止触发器发送错误?

时间:2019-03-26 09:45:57

标签: sql sql-server tsql triggers

我在删除一行(用户)以删除具有由该行的ID组成的名称的表(但并非每个ID都有一个表)之后编写触发器,我不喜欢在该表中抛出异常不存在!

CREATE TRIGGER AfterDeleteUser
            ON usersProject
            FOR DELETE
            AS DECLARE @IDres VARCHAR(50),
            @tablename VARCHAR(50)


            SELECT @IDres = ins.IDressource FROM DELETED ins;
            set @tablename = concat('MSG_', @IDres);

            SET NOCOUNT ON;
            DECLARE @Sql NVARCHAR(MAX);

            SET @Sql = N'DROP TABLE '+QUOTENAME(@tablename)

                EXECUTE sp_executesql @Sql;
            go

当表不存在时出现此错误!

  

Msg3701,Niveau 11,État5,Ligne 7

     

无法删除表“ MSG_”,因为该表不存在或您没有权限。

1 个答案:

答案 0 :(得分:3)

从SQL Server 2016开始,您可以使用以下语法:

DROP TABLE IF EXISTS [Tablename]

对于旧版本,您可以执行以下操作:

IF OBJECT_ID('tablename', 'U') IS NOT NULL 
  DROP TABLE tablename;