Я работаю над большим проектом ETL и DW, где мы используем TFS / контроль исходного кода вместе с SSIS и SSDT.
Сегодня я обнаружил, что хотя пакет служб SSIS выполняет BULK INSERT в таблице базы данных, невозможно выполнить сравнение схемы SSDT с этой базой данных. Это прискорбно, так как некоторые из наших пакетов занимают достаточно много времени. Мы хотим использовать функцию сравнения схем для обнаружения изменений в структуре базы данных, чтобы сохранить их в нашем проекте SSDT для контроля версий базы данных.
Посмотрев немного подробнее, я обнаружил, что функция сравнения схем в SSDT выполняет сценарий SQL, который вызывает OBJECTPROPERTY()
системную функцию для таблиц в базе данных. В частности, в моем случае любые вызовы, по- OBJECTPROPERTY(<object_id>, N'IsEncrypted')
видимому, блокируются, когда <object_id>
речь идет о таблице, которая в настоящее время массово вставляется.
В Visual Studio схема сравнения SSDT просто отключается через некоторое время и утверждает, что никаких различий не обнаружено.
Есть ли обходной путь к этой проблеме в SSDT, или я должен попытаться подать отчет об ошибке MS Connect?
В качестве альтернативы, поскольку BULK INSERT происходит из пакета OBJECTPROPERTY
служб SSIS, возможно, существует какой-либо способ сделать эту вставку без блокировки -calls на таблице? Редактировать: В пунктах назначения SSE OLE DB мы можем убрать галочку из «Таблицы блокировок», которая делает то, что говорит, но это может снизить производительность в некоторых ситуациях. Меня гораздо больше интересует решение, которое позволяет SSDT Schema Compare выполнять свою работу, даже если некоторые объекты заблокированы.