- У меня есть «главная» база данных, которая содержит таблицу с именем ServerName и столбцами DatabaseName.
- Каждая строка представляет собой «дочернюю» базу данных, которая может находиться на том же или разных серверах.
- Всегда будет как минимум 1 ряд, но теоретически может быть неограниченное количество строк.
- В каждой «дочерней» базе данных есть таблица A с ColumnA.
Как создать представление или функцию (возможно, возвращает xml) в мастер, который объединит все значения ColumnA во всех базах данных?Создать VIEW, охватывающий неизвестное количество баз данных
Что-то вроде этого:
USE Master;
GO
CREATE VIEW dbo.MyView
AS
SELECT ColumnA FROM Server1.database1.dbo.TableA
UNION ALL
SELECT ColumnA FROM Server1.database2.dbo.TableA
UNION ALL
SELECT ColumnA FROM Server2.database1.dbo.TableA;
GO
но, очевидно, мы читаем имя_сервера и имя базы данных из основной таблицы.
не видят никакого другого пути, кроме использования курсора и цикла тщательного и получить unioned колоннообразных данных. – Rahul
Но даже тогда он не был бы динамичным, как .. + ServerValue + ']. [' + DbValue + '] .dbo.TableA.ColumnA - ему понадобится exec для каждой строки, а exec не будет работать в функции. Tricky – DomBat
не ответ, а что-то думать. учитывая, что вы сохраняете все свои «дочерние» строки подключения в таблице базы данных в «основной» базе данных, я надеюсь, что у вас есть жесткая безопасность вокруг вашей «основной» базы данных или одна таблица получает эксплоатацию и каждая база данных используется. –