[英]How to copy data from one table to another in SQL Server
我正在尝试按计划的传输将数据从受信任的SQL Server 2012上的视图复制到SQL Server本地实例上的表 。 在这种情况下,最佳做法是什么?
到目前为止,我提供了以下选项:
用C#或VB编写可执行程序以删除现有的本地表,从远程数据库中查询数据,然后将结果写入本地数据库中的表。 该可执行文件将在计划任务上运行。
使用BCP将数据复制到文件,然后上传到本地表。
使用SSIS
注意:本地和远程SQL Server之间的连接非常慢。
由于传输是有计划的,因此我想您希望此数据是最新的。
我的建议是使用SSIS并使用SQL Agent计划它。 如果您编写了C#程序,我认为您将获得的最佳结果是模仿SSIS的程序。 而且,SSIS随时随地都是很容易修改的工作流程。
无论哪种方式,要使此类程序/程序包都是最新的,您都必须回答一个重要的问题: 源表是可更新的还是像日志(仅插入)? 这个问题是如此重要,因为它将决定您如何从源表中获取新更新。 例如,如果表代表日志,则您很可能会使用主键来检测新记录,如果不是,则可能要查找代表更新日期/时间的列。 如果您有权更改源表,则可能需要添加代表行版本的timestamp列( timestamp
与datetime
不同)
对于构建SSIS包,它将主要包含以下组件:
Execute SQL Task
以从源表获取最大值。
Execute SQL Task
以获取应从目标表开始的最后一个值。 您可以通过从目标表中选择最大值来获得该值,或者如果该表很大,则可以将该值存储在另一个表(例如配置表)中。
Data Flow
,该数据Data Flow
将数据从源表中移至步骤2中获取的值之后,将其从步骤2中获取的值开始。
如果选择了此技术,请Execute SQL Task
以将新的最大值更新回配置表。
BCP可以用于导出数据压缩和通过网络传输,然后可以将其导入到SQL的本地实例中。 同样,对于BCP,数据导出可以包含在较小批量的数据中,以便于数据管理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.