【问题标题】:Is is possible to run DTSWizard.exe from a command line?是否可以从命令行运行 DTSWizard.exe?
【发布时间】:2015-08-27 15:37:31
【问题描述】:

我使用 Visual Studio 构建了一个 SSIS 包,但它需要大约 20 小时才能运行。同时,如果我只使用 SQL Server 导入/导出向导,大约需要一个小时。所以我的问题是 - 是否可以从命令行运行 DTSWizard.exe?

我的最终目标是自动化数据导入过程并每月运行一次

【问题讨论】:

  • 导入/导出向导创建一个包。您可以保存包并运行它
  • 这并没有真正回答我的问题。我想知道是否有可能从命令行和/或以编程方式运行 DTSWizard.exe
  • 听起来不错。只是认为下次运行它可能不会花费 20 个小时。这不是一个答案,只是一个评论
  • 我找到了这个链接msdn.microsoft.com/en-us/library/ms138023.aspx#dtexec,你可以用它来创建一个批处理文件
  • 你试过了吗? google.com/…

标签: sql-server ssis dts


【解决方案1】:

SSIS 是一种用于执行提取、转换和加载 (ETL) 操作的工具。

DTSWizard(导入/导出向导)生成一个 SSIS 包。 Visual Studio 还会生成一个 SSIS 包。两者之间的最大区别在于导入/导出向导实际上不允许您执行数据类型转换之外的转换。第二个区别是导入导出向导可用于所有版本的 SQL Server,包括 Express。如果您只安装了 Express Edition,则保存包功能将被禁用。

导入/导出向导采用的方法是在数据流中将源添加到目标,最多为 N(我认为是 5)。如果您选择了超过 N 个源到目标,那么它会添加更多数据流任务。凭借这种设计“模式”,前 N 次转换可以并行运行,也就是同时运行。

如果您设计的包与 DTS 向导发出的包之间的时间增加了 20 倍,那么您的数据流任务可能是串行运行的。消除它们之间的先例约束,它们应该并行运行并为您节省 1 小时的运行时间。

要直接回答这个问题,他们不会发布 DTSWizard 的参数,但您可以观察到它确实接受了这些参数,因为从 SSMS 启动时,取决于您选择的是导出数据还是导入数据,它会预填充源/目标组件作为 SQL Server 类型的 OLE DB 连接管理器。

如果您认为自己会很聪明,将现有的 DTSWizard.exe 重命名为 _DTSWizard.exe,然后创建一个具有相同名称的批处理脚本,该脚本写出传递给它的参数以捕获 SSMS 的功能,但使您的 SSMS 实例崩溃,所以不要这样做。

因此,您可以从命令行启动 DTSWizard.exe,但不能指定源和目标连接管理器 + 所涉及的所有表/文件。您遇到的性能差异可能是由于设计造成的,并且使用向导而不是“常规”SSIS 并没有内在的好处。

【讨论】: