有没有办法查询生活在具有相同选择查询的2个不同服务器上的数据库?我需要使用查询将Prod中的所有新行带到dev 如下。我将使用SQL Server DTS(导入导出数据实用程序)来做这件事。
Insert into Dev.db1.table1
Select *
from Prod.db1.table1
where table1.PK not in (Select table1.PK from Dev.db1.table1)
答案 0 :(得分:1)
创建链接服务器是我所知道的唯一方法。如果您只是尝试将所有新行从prod添加到dev,那么为什么不只是创建该特定表的备份并将其拉入dev环境,然后从同一服务器和数据库中编写查询?
当然,这是一次性使用和重新发生实例的痛苦,但如果它是一次性的话,那么我建议这样做。否则在两者之间建立链接服务器。
要在SQL中备份单个表,请使用SQl Server导入和导出向导。选择prod数据库作为数据源,然后仅选择prod表作为源表,并在dev环境中为目标表创建一个新表。
这可以帮到你找到你想要的东西。
答案 1 :(得分:1)
你说你在使用DTS;现代的等价物是SSIS。
通常,您在SSIS包中使用数据流任务将实时系统中的所有信息提取到目标上的临时表中,然后从那里加载。这是数据仓库时非常标准的操作。
有许多不同的方法可以帮助您保存复制所有数据(例如,使用时间戳,使用rowversion,使用Change Data Capture,利用您的主键永远变大的事实,等等。或者您可以通过查找流directly in SSIS ...
来做您想做的事情最好的方法取决于很多方面:您获得了多少数据,服务器之间的数据传输速度,密钥类型等等。
答案 2 :(得分:0)
如果您的服务器都在一个Active Directory中,并且当您使用Windows身份验证时,那么您只需要一个对所有数据库拥有适当权限的帐户!
然后,您可以简单地引用所有表格,例如server.database.schema.table
例如:
insert into server1.db1.dbo.tblData1 (...)
select ... from server2.db2.dbo.tblData2;