Как предотвратить отправку триггером ошибки, если таблица не существует? - PullRequest
0 голосов
/ 26 марта 2019

Я написал триггер после удаления строки (пользователя) для удаления таблицы, имя которой составлено из идентификатора этой строки (но не у каждого идентификатора есть таблица), я не люблю бросать исключения в коде, если таблица не существует!

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

Я получаю эту ошибку, когда таблица не существует!

Msg 3701, Niveau 11, État 5, Ligne 7

Невозможно удалить таблицу 'MSG_', так как она не существует или у вас нет разрешения.

1 Ответ

3 голосов
/ 26 марта 2019

Начиная с SQL Server 2016, вы можете использовать синтаксис:

DROP TABLE IF EXISTS [Tablename]

Для более старых версий вы можете сделать:

IF OBJECT_ID('tablename', 'U') IS NOT NULL 
  DROP TABLE tablename; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...