这个问题可能是一个意见问题,所以如果这属于一个自以为是的问题我会道歉。为了缩小问题的范围,我将详细说明为什么以及为什么要尝试这样做。
我正在使用SQL Server 2014.我们的想法是,我们拥有一个主要软件,其中一个服务器托管在一个服务器上,我们的HR部门用它来添加,更新和删除公司员工。我参与设计和开发特定工作流程的新网站,我在每个网站上都有表格,用于存储有关用户的信息。我想要做的是在主系统数据库表上设置与员工信息相关的触发器,以便它将记录插入到员工更新表中,然后显示给管理员批准,在这种情况下,更改将应用于我在新网站的数据库中有表格。问题是我的数据库托管在与托管主软件数据库的服务器不同的服务器上。
我已阅读本文(https://www.sqlshack.com/querying-remote-data-sources-in-sql-server/),并查看了连接到其他服务器的各种方法。我读到的有关完成此任务的3种方法如下: OPENDATASOURCE, OPENROWSET, 链接服务器
阅读完这篇文章之后,这句话对我说了一句话, " SQL Server链接服务器与即席查询的不同之处在于,即席查询打开与远程服务器的临时连接并关闭它,永久链接服务器始终可供使用。"
因为我只需要在触发器上打开连接来进行插入,我认为ad hoc方法最好,因为我不会连续地连接到远程服务器。这是我第一次尝试这样的事情,所以我很欣赏任何建设性的评论,你会选择哪种方法以及为什么,如果我以错误的方式解决这个问题,请建议你如何做它提供了一些参考资料,因为我很乐意阅读建议帮助我开发的文章或链接。
答案 0 :(得分:2)
您需要使用四部分命名查询创建链接数据库并查询此数据库。
您可以创建链接数据库使用此语法sp_addlinkedserver
,如下所示:
sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ]
[ , [ @provider= ] 'provider_name' ]
[ , [ @datasrc= ] 'data_source' ]
[ , [ @location= ] 'location' ]
[ , [ @provstr= ] 'provider_string' ]
[ , [ @catalog= ] 'catalog' ]
然后使用四部分命名查询在trigger
插入到此链接数据库表中,如下所示:
insert into [server].[database].[schema].[object] values(...)
有关链接服务器和数据库的更多信息:bokeh-api source code
答案 1 :(得分:2)
如果您不想在两个系统之间建立硬连接,请考虑使用SQL Server Service Broker。 Service Broker允许您通过来回传递消息在两个系统之间进行异步通信。例如,如果您的应用程序数据库不可用,会发生什么?源系统上的插入是否会失败?如果是这样,那么触发器中的链接服务器查询是最简单的选择。如果您想要一种更容错的方法,那么Service Broker可以满足您的需求。
Service Broker简介。 https://technet.microsoft.com/en-us/library/ms345108(v=sql.90).aspx