Sql server 将数据从一个位置传输到具有相同数据库和表架构的另一个位置

Sql server 将数据从一个位置传输到具有相同数据库和表架构的另一个位置,sql-server,ftp,export-to-csv,database-replication,import-from-csv,Sql Server,Ftp,Export To Csv,Database Replication,Import From Csv,在100公里的范围内,我们有两个分支机构B-1和B-2。这两个分支在各自的位置都有自己的SQL server设置;使用相同的数据库名称、表和结构。。。表示这两个服务器具有相同的数据库和表架构 B-1自2017年起投入使用。因此,我们认为它是一个主服务器,我们已经设计了数百个报告,并提供完整的统计和运行报告。 B-2是最近安装的,问题是在这里,我们的电力来源非常有限,实际上根本没有电力供应。因此,我们使用生成器连续运行服务器+用户PC 8小时。 这两个部门的工作性质是相同的 我的问题是,由于没有V

在100公里的范围内,我们有两个分支机构B-1和B-2。这两个分支在各自的位置都有自己的SQL server设置;使用相同的数据库名称、表和结构。。。表示这两个服务器具有相同的数据库和表架构

B-1自2017年起投入使用。因此,我们认为它是一个主服务器,我们已经设计了数百个报告,并提供完整的统计和运行报告。 B-2是最近安装的,问题是在这里,我们的电力来源非常有限,实际上根本没有电力供应。因此,我们使用生成器连续运行服务器+用户PC 8小时。 这两个部门的工作性质是相同的

我的问题是,由于没有VPN,我很难有效地合并这两台服务器,而且我很难将这两个位置的报告一起退役。我想将新插入/编辑的数据从B-2传输到B-1主服务器的数据库。由于安全问题,我们也不能使用公共IP。我拥有的资源只有互联网连接

我计划将新添加/编辑的数据文件从B-2服务器2表上载到FTP服务器,然后我想将文件内容从FTP服务器插入B-1服务器,并从FTP中删除该文件

因此,我需要:

用于将新添加/编辑的表结果写入文件的Sql脚本例如:abcFileName 用于从上述fileEx:abcFileName向表中插入数据的Sql脚本。 注意:如果我获得了满足上述需求的脚本,那么我将通过批处理文件或.NET/C应用程序自动执行这些脚本,以便从B-2发送文件并在B-1接收文件

请注意:源表和目标表结构100%相同,没有任何差异

请不要提供SSMS解决方案,因为我计划在没有用户帮助的情况下自动执行查询

提前谢谢

由于.txt文件中没有阿拉伯字体,我切换到了.csv文件。这是我的解决方案查询:

    DECLARE @ExportSQL nvarchar(max);
SET @ExportSQL = 'EXEC ..xp_cmdshell ''bcp "SELECT TOP 5 * from Transport.dbo.Test_Table " queryout "D:\results4.csv" -T -c -t -S ABDULLAH-PCNEW'''

Exec(@ExportSQL)
我得到下面的CSV文件,但所有SQL表字段都在一个Excel列下

感谢您的所有意见/建议。实际上,我不想将其称为同步请求。。。。相反,我可以说这是一次推送,将受影响的数据从一个位置读取到另一个位置,而不是相反。。 让我们假设, B-1服务器已经有100000行了。 B-2服务器中有5行

作业日期:2020年10月2日 B-1服务器=保存10个新行。 B-2服务器=保存200个新行

一天结束时,我需要以下信息: B-1服务器=100210行
B-2服务器=205行

简单的想法:使用SQL选择生成插入脚本,使用OSQL和其他FTP工具以及批处理脚本自动生成插入脚本

示例选择:

select 'INSERT INTO TABLE_A(A, B) VALUES (' + CAST(A AS VARCHAR) + ', ' + CAST(B AS VARCHAR) + ')' from Table_A
它将为您提供如下结果:

INSERT INTO TABLE_A(A, B) VALUES (2, 3)
INSERT INTO TABLE_A(A, B) VALUES (5, 6)
使用OSQL执行该操作并将结果保存到文件:

osql -S yourserver -d yourDB -Q "SET NOCOUNT ON ; select 'INSERT INTO TABLE_A(A, B) VALUES (' + CAST(A AS VARCHAR) + ', ' + CAST(A AS VARCHAR) + ')' from Table_A" -o d:\test.sql

然后传输文件并在同一地点执行。

这个问题不容易在一个简单的答案中回答。 此功能或多或少是现成的。有些服务器需要直接连接才能将更改直接从一台服务器应用到另一台服务器,例如事务复制。其他的,如合并和快照复制,收集和发布可应用于订阅服务器的更改。这些更改可以定期存储在文件夹甚至FTP站点中

复制是一个大课题。这本书几乎是一整本书。您可以选中以查看有关如何配置合并复制(仅将特定表发布到订阅服务器可以读取的存储位置)的分步、逐屏指南

通过FTP发布是意料之中的事,事实上,分支机构和移动客户端在不将数据库服务器暴露于公共互联网的情况下获取数据是一种常见的方式。本文介绍了如何配置发布服务器和订阅服务器,以使用发布到FTP站点的快照和更改


这篇博文在一篇文章中描述了这两项活动。

你的问题是什么?这听起来像是对一项主要工作的请求,而不是对您遇到的特定问题的支持。@PeterSmith,很抱歉详细说明我的问题。简言之,我需要一个查询来将表内容(例如:有5列)写入一个文件。我还需要这个查询来将这个文件中的数据插入到同一个结构化表中。到目前为止,您都做了哪些尝试。你能告诉我们并解释你遇到了什么问题吗?我试图将数据保存到txt文件中,但阿拉伯语被一些垃圾值替换。这不是那么简单-OP想要传输整个数据库并合并更改。此外,bcp已经可以导出到平面文件,也可以从平面文件导入编码呢?OSQL/SELECT是一个简单的变体,它允许在脚本生成过程中对数据进行多次重构
他可以用bcp实现这一点,但使用什么工具执行查询和导出数据并没有多大区别。当然,他无论如何都需要大量的SQL/批处理脚本,因为他需要在DB中的某个地方存储已经导出的数据,等等。请再次阅读问题。它不是简单的导出/导入,更不用说您描述的脚本了。OP想要在没有直接连接的情况下同步两个数据库,直到无法理解您的抱怨。