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

Database SSDT项目中的链接服务器导致数据库漂移,database,sql-server-2012,linked-server,sql-server-data-tools,Database,Sql Server 2012,Linked Server,Sql Server Data Tools,我正在使用SSDT(VS2012)来维护和部署我们的数据库 最近,我们在主数据库项目中添加了一个链接服务器,并且第一次很好地部署了它。由于数据库漂移,即将部署到同一db服务器/数据库失败,导致错误: SQL00000:数据库已从其注册的数据层应用程序中漂移 对象[LinkedServer]已存在于具有不同定义的数据库中,将不会被更改 注意:出现此错误时,未对数据库进行任何更改 链接服务器的配置如下(已删除特定于客户的数据): 脚本文件的生成操作设置为Build,并作为架构的一部分进行部署 IF

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

最近,我们在主数据库项目中添加了一个链接服务器,并且第一次很好地部署了它。由于数据库漂移,即将部署到同一db服务器/数据库失败,导致错误:

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

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

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

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

脚本文件的生成操作设置为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

我们使用的发布配置文件设置了“数据库从注册版本漂移时阻止发布”。更改此设置不是一个选项,因为如果数据库已漂移,我们希望停止发布。

是否将此作为预部署脚本添加?如果是这样,考虑写一些逻辑来检查它是否存在。我想不出为什么我要将其部署为“构建”脚本,因为每次部署时它都会尝试执行上述操作。

使用预部署脚本解决了这个问题。尽管如此,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';
END

谢谢你的意见。除了将其添加为部署前脚本之外,我没有找到任何其他解决方案。奇怪的是,在VisualStudio中,当添加新项并选择链接服务器时,上面的脚本与VisualStudio创建的模板相同。该模板还将生成操作设置为Build。