首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建从表中读取的动态视图?

问如何创建从表中读取的动态视图?
EN

Stack Overflow用户
提问于 2019-04-24 21:03:17
回答 2查看 45关注 0票数 0

我有一个有姐妹数据库的服务器。我现在有一个从这些数据库获取数据的视图

代码语言:javascript
复制
SELECT UnId FROM [DatabaseOne].[dbo].Customers
UNION ALL
SELECT UnId FROM [DatabaseTwo].[dbo].Customers
UNION ALL
SELECT UnId FROM [DatabaseThree].[dbo].Customers

但是,我经常需要添加或删除数据库,因此静态视图似乎不是最好的解决方案。我已经有了一个包含所有姐妹数据库的表,如下所示。

DATDB

代码语言:javascript
复制
UnId | DSTABLE
1    | DatabaseOne
2    | DatabaseTwo
3    | DatabaseThree

如何创建读取此表的动态视图?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-24 21:16:24

正如肖恩明确指出的那样,视图不可能是动态的。

除了Sam的注释之外,您还可以做的其他事情是在INSERT/UPDATE/DELETE之后,在DATDB表中添加一个触发器,该触发器构建并执行一个ALTER语句,以更改视图以从DATDB表中的最新值中选择。

票数 2
EN

Stack Overflow用户

发布于 2019-04-25 08:20:16

考虑读取DATADB表并创建选择语法的存储过程,并将其作为动态SQL运行。

代码语言:javascript
复制
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

输出

代码语言:javascript
复制
SELECT Unid FROM [DatabaseOne].[dbo].[Customers] UNION ALL  
SELECT Unid FROM [DatabaseTwo].[dbo].[Customers] UNION ALL  
SELECT Unid FROM [DatabaseThree].[dbo].[Customers]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55838511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档