Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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
Sql 创建引用尚未创建的视图的视图_Sql_Sql Server_Tsql_Schema - Fatal编程技术网

Sql 创建引用尚未创建的视图的视图

Sql 创建引用尚未创建的视图的视图,sql,sql-server,tsql,schema,Sql,Sql Server,Tsql,Schema,我有一个用于SQL和Oracle的模式提取工具,它尝试从另一个数据库的模式中创建一个新的数据库 我目前遇到了一个SQL问题(很可能存在于Oracle中),当它尝试执行以下操作时 CREATE VIEW TestView SELECT * FROM AnotherViewNotCreated 这是错误的 我原以为在SQL中使用EXEC命令可以工作,但它也抱怨视图不存在 是否有一种方法可以创建视图,即使它们引用了其他尚不存在的视图 更新:我注意到,如果您从SQL生成脚本,它会按顺序输出视图创建顺序

我有一个用于SQL和Oracle的模式提取工具,它尝试从另一个数据库的模式中创建一个新的数据库

我目前遇到了一个SQL问题(很可能存在于Oracle中),当它尝试执行以下操作时

CREATE VIEW TestView
SELECT * FROM AnotherViewNotCreated
这是错误的

我原以为在SQL中使用
EXEC
命令可以工作,但它也抱怨视图不存在

是否有一种方法可以创建视图,即使它们引用了其他尚不存在的视图


更新:我注意到,如果您从SQL生成脚本,它会按顺序输出视图创建顺序,这似乎表明它知道应该首先创建哪些脚本以防止引用问题。不知道它是怎么知道的?

我想你不能。建议您先“伪造”表,这可能对您有用,但当真实视图可用时,您可能需要重新创建从属视图。

如果视图调用的是尚不存在的视图,您如何创建该视图?您只需按依赖关系顺序运行脚本


出于性能原因,我不建议使用调用其他视图的视图。我们几乎失去了一个价值数百万美元的客户端,因为一些应用程序开发人员认为这是一个好主意。它工作得很好,直到有大量的数据,然后系统慢到爬行。调用其他视图的视图,特别是当它们向下超过一级时,可能特别难以进行故障排除和维护。我真的会考虑这是否是个好主意

它知道得很清楚,因为它不允许在没有可解析依赖项的情况下创建视图。我认为这对您的情况没有帮助,但SQL Server有一个
CREATE SCHEMA
语句块,允许您以任意顺序声明依赖对象(甚至是相互依赖的对象)。这使得声明某些模式变得更加容易——尽管它仍然需要声明所有依赖项。