Как создать динамическое представление, которое читает из таблицы? - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть сервер с родственными базами данных. В настоящее время у меня есть следующий вид, который получает данные из этих баз данных

SELECT UnId FROM [DatabaseOne].[dbo].Customers
UNION ALL
SELECT UnId FROM [DatabaseTwo].[dbo].Customers
UNION ALL
SELECT UnId FROM [DatabaseThree].[dbo].Customers

Однако мне часто нужно добавлять или удалять базы данных, поэтому статическое представление не кажется лучшим решением. У меня уже есть таблица, которая содержит все дочерние базы данных, как показано ниже.

DATDB

UnId | DSTABLE
1    | DatabaseOne
2    | DatabaseTwo
3    | DatabaseThree

Как мне создать динамическое представление, которое читает эту таблицу?

Ответы [ 2 ]

2 голосов
/ 25 апреля 2019

Как ясно утверждает Шон, представление не может быть динамическим.

Что-то еще, что вы можете сделать, кроме комментария Сэма, это поместить TRIGGER в вашу таблицу DATDB, AFTER INSERT / UPDATE / DELETE, которая создает и выполняет инструкцию ALTER VIEW, чтобы изменить представление для выбора из последних значений в DATDB Таблица.

0 голосов
/ 25 апреля 2019

Рассмотрим хранимую процедуру, которая читает таблицу DATADB и, например, создает синтаксис SELECT и запускает ее как динамический SQL

declare @SQL varchar(1000)
declare @table as table (Unid int, DSTABLE varchar(50))
INSERT INTO @table
select 1 as Unid, 'DatabaseOne' as DSTABLE union
select 2 as Unid, 'DatabaseTwo' as DSTABLE union
select 3 as Unid, 'DatabaseThree' as DSTABLE 



 SELECT @SQL = (STUFF((
        SELECT ' ' + ' SELECT Unid FROM ' + QUOTENAME(DSTABLE) + '.[dbo].[Customers] UNION ALL'
        FROM @table
        FOR XML PATH('')
        ), 1, 2, '')
    ) -- Multiple rows to one row

SELECT @SQL = SUBSTRING(@SQL, 0, LEN(@SQL)-9) -- remove last UNION ALL
--exec (@SQL)
--print @SQL

Вывод

SELECT Unid FROM [DatabaseOne].[dbo].[Customers] UNION ALL  
SELECT Unid FROM [DatabaseTwo].[dbo].[Customers] UNION ALL  
SELECT Unid FROM [DatabaseThree].[dbo].[Customers]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...