В другой БД есть ~ 10 представлений, из которых мне нужно получить данные. В настоящее время моя команда передает строку в команду SQL EXEC
. Я знаю, что есть лучший способ. Локальная БД содержит данные для устаревшего программного обеспечения, а «другая» БД содержит данные для нового программного обеспечения. Мы объединяем два. Более новое программное обеспечение также создает новую БД для каждого клиента / проекта с идентичными структурами.
Оптимально, я хотел бы создать триггеры для каждого из 10 представлений, которые вставляются в уже существующую таблицу в нашей локальной БД. Моя проблема здесь в том, что представления могут иметь только триггеры INSTEAD OF
, и мне понадобится триггер AFTER
, чтобы БД по-прежнему работала нормально.
Другой метод, который я рассматриваю, - это UDF с табличным значением. Мой самый большой недостаток в этом состоит в том, что устаревшее программное обеспечение использует уникальные идентификаторы, тогда как новое программное обеспечение не (для полей, которые я выбираю).
Есть ли другой способ, которого я не вижу, или какие-либо улучшения эти методы?
Я опубликую псевдо-пример ниже - у меня есть одна БД с таблицей (например), называемой car-parts, а также набор хранимых процедур и представлений, которые используют указанную таблицу. В другой БД у меня есть 10 таблиц, каждая из которых представляет автомобильную деталь (двигатель, глушитель, сиденья и т. Д. c.), Которую необходимо объединить и использовать аналогично таблице автомобильных деталей. Для каждого нового производственного продукта программное обеспечение для моделирования создает новую БД для этих 10 таблиц.
Сейчас мы делаем что-то вроде
DECLARE @SQLCmd varchar(max) = '
SELECT * FROM [''' + @DynamicTableName + '''].[dbo].[Engine]
UNION
SELECT * FROM [''' + @DynamicTableName + '''].[dbo].[Muffler]
... '
EXEC(@SQLCmd)
Идентификаторы в деталях машины могут быть уникальными, тогда как идентификаторы в 10 таблицах могут не совпадать, поэтому предположим, что их нельзя использовать.