SSIS-将多个SQL Server表导出到多个文本文件

Web_developer_beginner

我必须在两个SQL Server数据库之间移动数据。我的任务是将数据导出为文本(.dat)文件,移动文件并导入到目标位置。我必须迁移200多个表。

这就是我尝试过的

1)我使用Execute SQL任务来获取我的表。2)使用一个For Each循环来循环遍历集合中的表名。3)在for每个循环中使用脚本任务来构建文本文件目标路径。4)调用了DFT,其中表名在源ole db的变量中,而路径名在目标平面文件的变量中。

第一张桌子提取得很好,但是第二张桌子炸弹出现同步错误。我看到这是很多帖子,但找不到与我的情况相符的帖子。因此在这里发布。

即使我让程序包与多个DFT一起使用,第二个DFT中的第二个表也不会导出列,因为平面文件连接管理器仍会记住第一个表列。有没有办法让它忘记列?

关于如何使用动态源和目标变量使用一个DFT将多个表导出到多个文本文件的任何想法?

谢谢,感谢您的帮助。

Web_developer_beginner

我想出了一种方法来做到这一点。我以为如果有人陷在同样的情况下,我会分享。

因此,总而言之,我需要通过文件导出和导入数据。由于各种原因,我也想尽可能使用格式文件。

我所做的是

1)构造一个DFT,该DFT可让我从需要导出的数据库中获取表名列表。我将“ oledb”用作源,将“ recordset目标”用作目标,并将表名存储在对象变量中。

DFT并不是真正必要的。您可以通过其他任何方式进行操作。同样,在我们的应用程序中,我们将表名称存储在一个表中。

2)添加一个“对于每个循环容器”和一个“对于每个ADO枚举器”,它将上一步中的对象变量带入集合。

3)逐一解析变量,并在Script任务内构造如下所示的BCP语句。根据需要创建变量。BCP语句将存储在变量中。

我遍历表并像这样构造多个BCP语句。

BCP“ DBNAME.DBO.TABLENAME1”移出“ PATH \ FILENAME2.dat” -S服务器名-T -t“ | ” -r $ \ n -f“ PATH \ filename.fmt”

BCP“ DBNAME.DBO.TABLENAME1”移出“ PATH \ FILENAME2.dat” -S服务器名-T -t“ | ” -r $ \ n -f“ PATH \ filename.fmt”

语句放在.bat文件中。这也是在脚本任务中完成的。

4)执行过程任务将接下来执行.BAT文件。我之所以必须这样做,是因为我无法选择在我的公司中使用“ master..xp_cmdShell”命令或“ BULK INSERT”命令。如果我可以选择执行cmdshell,则可以直接从软件包中运行命令。

5)再次添加“对于每个循环容器”和“对于每个ADO枚举器”,它将上一步中的对象变量带到集合中。

6)逐一解析变量,并在Script任务内部构造BCP语句。根据需要创建变量。BCP语句将存储在变量中。

我遍历表并像这样构造多个BCP语句。

“ PATH \ FILENAME2.dat”中的BCP“ DBNAME.DBO.TABLENAME1” -S SERVERNAME -T -t“ | ” -r $ \ n -b10000 -f“ PATH \ filename.fmt”

“ PATH \ FILENAME2.dat”中的BCP“ DBNAME.DBO.TABLENAME1” -S SERVERNAME -T -t“ | ” -r $ \ n -b10000 -f“ PATH \ filename.fmt”

语句放在.bat文件中。这也是在脚本任务中完成的。

-b10000已放置,因此我可以批量导入。没有这些,由于tempdb中的空间较少,因此无法复制我的许多大表。

7)运行.bat文件以再次导入该文件。

我不确定这是否是最佳解决方案。我仍然认为我会分享满足我要求的东西。如果我的答案不清楚,如果您有任何疑问,我很乐意解释。我们还可以优化此解决方案。完全可以通过VB脚本完成相同的操作,但是您必须编写一些代码才能做到这一点。

我还创建了一个程序包配置文件,可以在其中动态更改数据库名称,服务器名称,数据和格式文件位置。

谢谢。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章