Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure/Transact-SQL:动态创建同名表的视图或在视图创建后添加表_Sql_Azure_Tsql_Azure Sql Database_Sql View - Fatal编程技术网

Azure/Transact-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 是否可以创建视图,使其自动查询具有相同名称

我是Azure的新手,对SQL不是很在行,所以非常感谢您的帮助。 我有一个数据库,每个用户都有一个模式。每个模式都有相同名称的结构相同的表,例如“
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