Azure/Transact-SQL:动态创建同名表的视图或在视图创建后添加表
我是Azure的新手,对SQL不是很在行,所以非常感谢您的帮助。 我有一个数据库,每个用户都有一个模式。每个模式都有相同名称的结构相同的表,例如“Azure/Transact-SQL:动态创建同名表的视图或在视图创建后添加表,sql,azure,tsql,azure-sql-database,sql-view,Sql,Azure,Tsql,Azure Sql Database,Sql View,我是Azure的新手,对SQL不是很在行,所以非常感谢您的帮助。 我有一个数据库,每个用户都有一个模式。每个模式都有相同名称的结构相同的表,例如“Table” 我现在需要另一个模式中的视图,它提供所有表表中所有行的只读联合 我成功地创建了一个架构,比如视图,处理了它的权限并创建了一个视图,“表视图”,使用分区视图中的以下SQL@: 我现在希望这个视图是动态的,因为将来的模式(SchemaX)被添加,甚至可能被删除,而无需反复删除和创建TableView 是否可以创建视图,使其自动查询具有相同名称
Table
”
我现在需要另一个模式中的视图,它提供所有表表中所有行的只读联合
我成功地创建了一个架构,比如视图
,处理了它的权限并创建了一个视图,“表视图
”,使用分区视图中的以下SQL@:
我现在希望这个视图是动态的,因为将来的模式(SchemaX
)被添加,甚至可能被删除,而无需反复删除和创建TableView
是否可以创建视图,使其自动查询具有相同名称的所有表?或者,也许有某种方法可以在创建后“添加”额外的表
我可以通过查询INFORMATION\u SCHEMA
获得所有SchemaX.Table
的列表,但是除了删除python脚本并再次创建视图之外,我迷路了
感谢@larnu的评论,这是非常有用和专业的:
- 要动态地实现这一点,在
视图中执行是不可能的。
您必须使用存储过程,这意味着您不能这样做
从中选择之类的简单操作,使其更难使用
- 而不是在不同的模式上有17个完全相同的表
有一个表,其中包含一列
BusinessName
。而不是
MySmartCompany.Mytable
表中有一列dbo.Mytable
(或
您的通用模式),称为BusinessName
,其值为'MySmartCompany'
这对其他社区成员也有好处。听起来真正的问题是你有设计缺陷。这样的设计无法扩展,如果您添加一个新用户,您的视图
将无法反映这一点,如果您删除一个用户(并删除其模式和对象),则视图
将中断。模式不应该存储元数据,例如数据属于谁(用户),它应该是表中的一列。这里真正需要做的是修复设计。还要注意,要动态地实现这一点,在视图中不可能做到。您必须使用存储过程,这意味着您无法从中执行简单的操作,例如SELECT
,这使得它的使用更加困难。@Larnu抱歉,我没有很好地描述它。每个模式都可以被视为一个企业/部门的数据集合,并且有多个用户与之交互。这样做是为了尝试和整理数据库,以及保持每个企业的数据安全和在他们的控制。该视图的原因是收集一些数据以供只读使用,因此,在不同的架构上,您没有17个完全相同的表,而是有一个表,其中包含一列BusinessName
。在表dbo.Mytable
中有一列名为BusinessName
,而不是MySmartCompany.Mytable
,它的值为'MySmartCompany'
。您好@stormpie,谢谢Larnu,谢谢!
CREATE VIEW Views.TableView
AS
SELECT *
FROM Schema1.Table
UNION ALL
SELECT *
FROM Schema2.Table
UNION ALL
SELECT *
FROM Schema3.Table
...
GO