是否有某种方法可以在数据库中创建链接到不存在的表的视图?
我们刚刚发现数据导入例程已经失败了一段时间,因为意外删除视图的升级幅度相当大。
视图(在我们的产品的数据库中,托管在客户端服务器上)链接到我们的一个客户数据库中的表,并由我们的客户为此目的创建。
意外删除此视图是由于数据库更改的数量(包括视图的创建和删除),以及SQL比较工具将丢弃特定于客户端的视图的事实根本就错过了。
因此,能够在我们的本地开发数据库上创建此视图的副本非常有用(具有我们显然无法访问实时环境的客户端表的完全限定名称)所以这不会再发生了。
(有问题的客户正在运行SQL Server 2008,但是这个产品也是在2005环境下为其他客户运行的。所以2005年的答案会更好,但如果它具体是2008年的话#39; ta问题。)
更新
回应@Damien的评论......
我理解你所说的话,创建一个在视图中链接的空表会很有意义。
不幸的是,有问题的表不仅托管在不同的数据库中,而且托管在不同的SQL服务器上。这意味着我将在我们所有的开发机器上创建一个新的服务器实例,以便托管这个单独的空表。而且我必须在我们的许多客户端上执行此操作,从而导致大量几乎未使用的服务器实例。
我真的希望能够避免这种情况,而是能够创建视图(显然在我们的开发环境中会失败),但将来不会再被意外删除。
更新2
我已经接受了@Damien所说的并使用Linked Server
实现了这一点...详情请参阅我的回答
答案 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
完全“比较”...所以它永远不会(理论上)被删除作为升级的一部分。