Триггер блокирует публикацию проекта базы данных
У меня есть проект базы данных 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), мне не нужно менять свою процедуру.
Наконец, вместо этого я использовал свойство "Обрабатывать ошибки проверки как предупреждения". Эффект тот же, но вы действительно получите список потенциальных проблем в предварительном просмотре публикации.