каждый!
Мы используем MS SQL Master Data Services для организации основных данных нашего предприятия, и некоторые объекты, которые мы сохраняем, состоят из данных, которые мы загружаем из внешних источников практически как есть.Мы регулярно обновляем их, используя задания или пакеты служб SSIS, помещая данные в промежуточные таблицы ([stg].[<name>_Leaf]
) и запуская процесс подготовки, используя процедуры, названные [stg].[udp_<name>_Leaf]
, как описано в THIS и THIS разделы о процессе подготовки в MDS.
Иногда данные, которые мы импортируем из какого-либо внешнего источника, представляются в виде плоской таблицы, просто содержащей набор строк, на которые мы можем ссылаться в других наших таблицах изатем мы загружаем их и наслаждаемся (на самом деле мы помещаем данные в промежуточные таблицы, вызываем SP и позволяем MDS обрабатывать их в любое удобное для сервера время, поскольку основная нагрузка промежуточного процесса выполняется асинхронно через посредник).
Но есть много других уродливых, но реальных случаев, когда загружаемые нами данные представляются в виде дерева, содержащего ссылки на элементы, которые мы еще не загрузили и просто собираемсяпоместите их в промежуточные столы.
Проблема в том, что в большинстве случаев мы используем функцию автоматического создания кода (и мы не можем использовать не суррогатный код), и мы не можем установить значение поля ссылки на член (где должен быть размещен код члена ссылочной позиции)вновь созданному члену, прежде чем член будет создан и вставлен в базовую таблицу, а код сгенерирован и установлен.
Как я вижу, мы могли бы решить эту проблему, если бы могли ссылаться на промежуточный элемент по идентификатору промежуточной таблицы, который является IDENTITY и назначается сразу после вставки.
-OR-
Если бы мы могли получить обратный вызов от процесса подготовки, когда данные помещаются в наши базовые таблицы и присваиваются коды.Затем мы вычислили бы все ссылки и обновили бы их (используя тот же механизм процесса подготовки).
В настоящее время мы используем глупый не очень элегантный обходной путь, генерируя GUID и используя их в качестве значения кода, когда этот сценарий имеет место.
Кто-нибудь может предложить что-нибудь еще?(