Триггер блокирует публикацию проекта базы данных

У меня есть проект базы данных Visual Studio 2012, содержащий мою схему базы данных. В сценарии после развертывания я автоматически создаю ряд триггеров, отвечающих за регистрацию изменений в данных таблицы.

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

Это развертывание может столкнуться с ошибками во время выполнения, поскольку изменения в [dbo].[BenefitInfoVendor] заблокированы зависимостью [dbo]. [Tr_BenefitInfoVendor_Audit] в целевой базе данных.

Затем публикация отказывается проходить шаг "Создание предварительного просмотра публикации...".

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

Я попытался сбросить все триггеры в сценарии перед развертыванием, но этого "недостаточно", чтобы остановить эту ошибку.

Есть ли способ подавить эту ошибку в Visual Studio или иным образом дать ей понять, что я сам позабочусь о триггерах?

2 ответа

Решение

В последующем проекте я нашел решение, которое, кажется, обходит эту проблему. Я добавляю заглушку в каждый скрипт таблицы, который создает минимальный триггер с тем же именем, что и сгенерированный триггер, но который ничего не делает.

Это небольшое количество дополнительной типизации, и я могу не учитывать свою логику триггера.

CREATE TABLE [dbo].[AlertingDeviceTypes]
(
    [AlertingDeviceTypeId] INT NOT NULL PRIMARY KEY IDENTITY, 
    [Name] NVARCHAR(MAX) NOT NULL, 
    --Other fields...
    [Deleted] BIT NOT NULL DEFAULT 0, 
    [DeletionId] UNIQUEIDENTIFIER NULL
)
GO

CREATE TRIGGER [dbo].[tr_AlertingDeviceTypes_SetDeletionId] ON [dbo].[AlertingDeviceTypes] After UPDATE
    AS
    BEGIN
        --This is a placeholder for the autogenerated trigger.
        noop:
    END
GO

У меня такая же проблема. Я пробовал различные комбинации свойств "Игнорировать", хотя бы удаленно связанные с триггерами, но безуспешно:(

Затем я обошел его, сняв флажок со свойством "Проверить развертывание" (последнее в списке, доступное по кнопке "Дополнительно..." в окне публикации базы данных).

Это сработало для меня, но может привести к тому, что реальные проблемы не будут обнаружены до фактического развертывания. Поскольку я уже привык вручную перебирать сгенерированный скрипт для проверки потенциальных проблем (таких как новые непустые столбцы без ограничений DF), мне не нужно менять свою процедуру.

Наконец, вместо этого я использовал свойство "Обрабатывать ошибки проверки как предупреждения". Эффект тот же, но вы действительно получите список потенциальных проблем в предварительном просмотре публикации.

Другие вопросы по тегам