У меня есть система, которая передает данные между двумя базами данных с одинаковыми схемами (для целей разработки).Игнорировать триггеры при сборе зависимостей с SMO
Сходный хормейстер SMO отлично работает, за исключением триггеров. Если я получаю список зависимостей, мне все равно, если триггер вводит зависимость от другой таблицы, потому что триггер не будет выполняться во время передачи. Это особенно раздражает, если существуют круговые зависимости.
То, что я хотел бы знать, - это возможность игнорировать триггеры в шаге перехода на иждивении. Я пробовал несколько вещей, не повезло:
- Не включая триггеры в списке объектов при звонке
DiscoverDependencies
. В любом случае, я включаю таблицы. - Использование
FilterCallbackFunction
наDependencyWalker
. Это, кажется, ничего не делает.
Это код, у меня сейчас:
var tablesToLoad = scripter.WalkDependencies(new DependencyWalker(server).DiscoverDependencies(filteredTables, DependencyType.Parents))
.Where(n => n.Urn.Type != "UnresolvedEntity")
.Select(n => server.GetSmoObject(n.Urn))
.OfType<Table>()
.ToArray();
Переменная filteredTables
содержит список таблиц, которые я хочу использовать для передачи данных. Результатом являются все таблицы в их зависимости, которые должны быть переданы, с зависимостями между включенными таблицами (включая другие таблицы, которые необходимо втянуть, чтобы не допустить смены внешних ключей).
EDIT: Я хочу повторить, что проблема заключается не в том, выполняются триггеры, либо нет. Проблема заключается в том, что SMO просматривает триггеры при определении порядка зависимостей для загрузки таблиц. Поэтому, если триггер ссылается на другую таблицу, независимо от того, будут ли операторы, которые ссылаются на эту таблицу, когда-либо выполняться в триггере, эта ссылка рассматривается для разрешения зависимостей. Я не хочу, чтобы триггеры использовались для разрешения зависимостей вообще. Как заставить SMO игнорировать триггеры, не отбрасывая их из базы данных? Это мой вопрос.
Стол делает не существует в базе данных назначения? –
Таблица существует. Я просто передаю данные. – siride
просто идея, но как насчет переноса данных на промежуточный сервер базы данных, у которых есть только схема (и триггеры). После этого с этого промежуточного уровня отправьте на конечный сервер базы данных. –