创建不存在的表的视图

时间:2013-09-23 09:17:32

标签: sql-server sql-server-2005 view

是否有某种方法可以在数据库中创建链接到不存在的表的视图?

我们刚刚发现数据导入例程已经失败了一段时间,因为意外删除视图的升级幅度相当大。

视图(在我们的产品的数据库中,托管在客户端服务器上)链接到我们的一个客户数据库中的表,并由我们的客户为此目的创建。

意外删除此视图是由于数据库更改的数量(包括视图的创建和删除),以及SQL比较工具将丢弃特定于客户端的视图的事实根本就错过了。

因此,能够在我们的本地开发数据库上创建此视图的副本非常有用(具有我们显然无法访问实时环境的客户端表的完全限定名称)所以这不会再发生了。

(有问题的客户正在运行SQL Server 2008,但是这个产品也是在2005环境下为其他客户运行的。所以2005年的答案会更好,但如果它具体是2008年的话#39; ta问题。)


更新

回应@Damien的评论......

我理解你所说的话,创建一个在视图中链接的空表会很有意义。

不幸的是,有问题的表不仅托管在不同的数据库中,而且托管在不同的SQL服务器上。这意味着我将在我们所有的开发机器上创建一个新的服务器实例,以便托管这个单独的空表。而且我必须在我们的许多客户端上执行此操作,从而导致大量几乎未使用的服务器实例。

我真的希望能够避免这种情况,而是能够创建视图(显然在我们的开发环境中会失败),但将来不会再被意外删除。


更新2

我已经接受了@Damien所说的并使用Linked Server实现了这一点...详情请参阅我的回答

1 个答案:

答案 0 :(得分:2)

正如@Mark在his comment under my question中所说,似乎无法使用view执行此操作。 (stored procedures存在“延迟名称解析”,但views不存在。

我通过在我的开发机器上创建一个新实例来粗略地跟随@Damien's suggestion,这纯粹将用于这些“客户特定的空表”。

然后我用这个新实例创建了一个Linked Server对象,其中包含客户端服务器名称的别名(使用this answer on SO创建Linked Server对象),在实例中我创建了适当命名的数据库并适当地命名了表。

此新实例的服务已设置为“手动启动”,因此不应占用和资源 - 我可以在必要时将其启动并运行以用于将来的工作。

结果是我现在在我的开发数据库中有view问题,并且它与客户端数据库中的view完全“比较”...所以它永远不会(理论上)被删除作为升级的一部分。