我使用SSDT (VS 2012)来维护和部署我们的数据库。
最近,我们向主数据库项目添加了一个链接服务器,并且它第一次很好地部署。即将到来的部署到相同的db-server /数据库由于数据库漂移而失败,从而产生错误:
SQL00000:数据库已经脱离其注册的数据层应用程序。 对象LinkedServer已经存在于具有不同定义的数据库中,并且不会被更改。
注意:当出现此错误时,没有对数据库进行任何更改。
链接服务器配置如下(删除特定于客户的数据):
EXEC sp_addlinkedserver
@server=N'LinkedServer',
@srvproduct=N'',
@provider=N'SQLNCLI',
@datasrc=N'SrcPath';脚本文件将Build设置为Build,并作为模式的一部分进行部署。
我们使用的发布配置文件设置为“数据库偏离注册版本时的块发布”设置。更改此设置不是一个选项,因为如果数据库漂移,我们希望停止发布。
发布于 2014-04-09 19:52:20
你把它作为预部署脚本添加了吗?如果是这样的话,请考虑围绕它编写一些逻辑来检查它是否存在。我想不出为什么要将它部署为“构建”脚本,因为每次部署时,它都会尝试完成上述操作。
发布于 2014-04-10 06:10:34
使用部署前脚本解决了问题。不过,SSDT中的链接服务器模板是默认创建的,其生成操作设置为Build。因此,我认为应该让将链接服务器作为模式的一部分。
IF NOT EXISTS(SELECT * FROM sys.servers WHERE is_linked = 1 and name = 'LinkedServer')
BEGIN
EXEC sp_addlinkedserver
@server=N'LinkedServer',
@srvproduct=N'',
@provider=N'SQLNCLI',
@datasrc=N'SrcPath';
ENDhttps://stackoverflow.com/questions/22911302
复制相似问题