SSDT项目中的链接服务器导致数据库漂移

时间:2014-04-07 11:36:55

标签: database sql-server-2012 linked-server sql-server-data-tools

我正在使用SSDT(VS 2012)来维护和部署我们的数据库。

最近我们在主数据库项目中添加了一个链接服务器,并且它第一次部署得很好。由于数据库漂移,迎面而来的部署到同一个db-server /数据库失败,给出错误:

  

SQL00000:数据库已从其注册的数据层应用程序中漂移。

     

对象[LinkedServer]已经存在于具有不同定义的数据库中,不会被更改

注意:出现此错误时,数据库未进行任何更改。

链接服务器配置如下(删除了客户特定数据):

EXEC sp_addlinkedserver   
       @server=N'LinkedServer', 
       @srvproduct=N'',
       @provider=N'SQLNCLI', 
       @datasrc=N'SrcPath';

脚本文件的Build Action设置为 Build ,并作为模式的一部分进行部署。

我们使用的发布配置文件具有"当数据库已从注册版本" 设置中移出时阻止发布。更改此设置不是一个选项,因为我们希望在数据库漂移时停止发布。

2 个答案:

答案 0 :(得分:1)

您是否将此添加为预部署脚本?如果是这样,考虑在它周围写一些逻辑来检查它是否存在。我无法想到为什么我要将其部署为" Build"脚本,因为它会在您每次部署时尝试完全执行上述操作。

答案 1 :(得分:0)

使用预部署脚本解决了该问题。虽然SSDT中的Linked Server模板是默认创建的,Build Action设置为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';
END