4

有没有办法在链接到不存在的表的数据库中创建视图?

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

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

此视图的意外删除是由于数据库更改的数量(包括视图的创建和删除),而 SQL 比较工具将删除特定于客户端的视图这一事实被简单地遗漏了。

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

(有问题的客户正在运行 SQL Server 2008,但是该产品也可以在 2005 环境中运行,供其他客户使用。因此,最好选择 2005 的答案,但如果它是 2008 特定的,那不是问题。)


更新:

要回复@Damien 的评论...

我明白你在说什么,在视图中创建一个链接到的空表会很有意义。

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

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


更新 2

我已经接受了@Damien 所说的内容并使用Linked Server......查看我的答案以获取更多详细信息

4

1 回答 1

2

正如@Mark在我的问题下的评论中所说,似乎不可能用view. (“延迟名称解析”存在于stored procedures,但不存在于views)。

我解决它的方法是大致遵循@Damien 的建议,在我的开发机器上创建一个新实例,该实例纯粹用于这些“客户端特定的空表”。

然后我Linked Server使用客户端服务器名称的别名为这个新实例创建了一个对象(在 SO 上使用这个答案来创建Linked Server对象),并在实例中创建了适当命名的数据库和适当命名的表。

这个新实例的服务已设置为手动启动,因此它不应该占用资源 - 我可以在必要时启动并运行它以进行任何未来的工作。

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

于 2013-09-24T14:39:00.007 回答