Integration Services与原始SQL(T-SQL)

时间:2009-10-29 04:56:20

标签: sql-server tsql ssis

何时使用Integration Services以及何时使用SQL /存储过程?使用其中一个有什么好处?

如果要从旧系统迁移数据,是使用SSIS还是仅使用SQL?

7 个答案:

答案 0 :(得分:2)

通常我将BCP用于任何平面文件,服务器到服务器传输的链接服务器调用以及XML文件的内置XML支持,然后是任何转换的存储过程。

SSIS对于复杂的ETL过程非常有用,或者如果您需要逐步保留状态。否则它只是证明是一个额外的负担,因为它很难调试,越野车,我个人觉得用它开发更耗时。

答案 1 :(得分:1)

从遗产系统迁移数据

  1. 如果要从旧系统迁移数据,并且可以选择将旧系统数据库还原到新服务器,则不一定需要SSIS。如果您整体获取原始数据,新服务器上的T-SQL命令可能比SSIS数据流更快地编写脚本并运行。

  2. 如果只能通过链接服务器或SSIS访问旧数据,那么最好使用SSIS创建目标表并加载数据。通过链接服务器提取数据的存储过程调用通常比SSIS数据流连接慢。

  3. 如果旧版服务器是非SQL Server数据库(如MYSQL或Oracle),那么最好使用SSIS和数据流。您可以通过链接服务器执行此操作,但可能需要更多工作。

  4. 即使您选择使用SSIS从其他服务器提取数据,我建议您将所有表创建为T-SQL命令,而不是依赖于目标数据流中的create table选项。 create table选项不会创建索引,聚簇索引,主键等,它还会将每个字段默认为NULL。从旧服务器迁移数据时,我通常会编写原始对象的脚本,修改脚本,并在目标服务器上运行修改后的脚本。

  5. 我不建议使用SSIS中的默认向导来导入数据,除非它是一次性过程。从性能观点或维护观点来看,这些通常不是最好的。即使在加载数据一次时,我通常也喜欢单独编写每个对象的脚本,以确保我不会在新数据库中重复遗留数据库的错误。

  6. 如果您打算以重复发生的方式从旧系统加载数据,那么我建议使用SSIS包以保证可扩展性和可扩展性。即使你决定除了存储过程之外什么都不需要执行,至少你可以并行化并以有意义的方式组织存储过程调用。如果您只是在SQL Server代理作业步骤中按顺序执行存储过程,那么您将无法轻松地并行化该过程。

  7. 其他情景

    1. 当我想将进程分成单个步骤以进行可恢复性或性能监视时,我通常将存储过程称为SQL Server代理作业步骤。例如,如果我知道我需要在开始SSRS报告作业之前准备数据,那么我通常会做两步SQL Server代理作业。第一个将数据加载到表中,第二个启动共享计划。

    2. 另一种情况是我在运行其他几个依赖进程之前需要加载几个核心数据仓库表。我通常会使用存储过程来处理加载表的复杂清理规则,然后启动使用新加载的表的其他几个作业。所有后续步骤都可以是启动其他作业的T-SQL命令,用于清理更多数据的T-SQL命令,用于在服务器或输出文件之间移动数据的SSIS包等。

    3. 我总是使用SSIS导入数据或导出数据。即使它们可用,我也不使用等效的T-SQL命令来执行此操作。我这样做是因为我想要日志记录,恢复选项,易于开发,易于维护以及标准化的包工作流程。

    4. 由于我经营一个BI开发团队,他们从编写复杂的T-SQL语句到开发SSIS包或SSRS报告,他们做了一些事情,SSIS包让我们可以轻松地让团队中的任何人了解其他团队成员工作

答案 2 :(得分:0)

主要是MS Integration Services用于ETL场景,从各种类型的数据源导入数据或复杂的转换。如果您的方案不是其中之一,那么通常正常的存储过程将最有效。

答案 3 :(得分:0)

当转换变得复杂时我使用SSIS,特别是如果我需要从非SQL Server源(例如Excel电子表格或Visual FoxPro)中提取,尤其是如果我需要检查数据是否已经在插入具有外键约束的记录之前存在。

所以,如果我要导入成绩,那么我可以使用SSIS来确保学生都存在,如果学生确实存在,那么只需进行更新。

一旦我知道学生存在,那么我就能完成他们的成绩。

我在目标端使用了触发器和存储过程,因为我插入/更新了一个视图,以便我可以在一个查询中实际将数据发送到多个表。

所以,这取决于数据的来源以及数据的复杂程度,因为我可以重现SSIS的作用,但为什么要花费时间,因为MS做得适度。

答案 4 :(得分:0)

如果您正在使用表,则只有存储过程是选项,因为SQL引擎实际上将执行作业,而DISxec引擎执行SSIS。 SSIS是一种用于处理文件,外部资源等的工具。

答案 5 :(得分:0)

如果您正在将数据从一个sql server移动到另一个sql server而没有做任何其他事情,那么只使用sql可能会更好,因为它更简单,因此不会增加额外的工具集开销来学习和管理。

另一方面,如果您有复杂的转换,您需要错误处理,可重复和可测试的包配置,或者如果您从其他来源(如文本文件,电子表格等)中提取数据,那么SSIS会做得很好(如果有的话)笨重而繁琐的工作,这将节省时间。

所以......真的取决于情况......

答案 6 :(得分:0)

作为一般规则,除了一些例外:如果可以的话,总是使用SQL。

SSIS很适合您需要访问文件(csv,excel,txt,...)或非常旧的数据库(可能是DBASE或类似的东西),但在纯数据库事务中,很少有东西,如果有的话,你不能用纯净,干净和简单的SQL;)