Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSIS-定期将多个sql视图作为表导入_Sql_Sql Server_Ssis_Ssas_Sql Server 2014 - Fatal编程技术网

SSIS-定期将多个sql视图作为表导入

SSIS-定期将多个sql视图作为表导入,sql,sql-server,ssis,ssas,sql-server-2014,Sql,Sql Server,Ssis,Ssas,Sql Server 2014,我对SQL Server管理相当陌生,目前正在考虑使用SSIS构建解决方案。 我的问题主要是关于“我的逻辑正确吗”以及一些关于最佳实践是什么的小问题 但让我先给你画一幅画 我有一个为我提供DB视图的应用程序,为了减轻数据库的压力,我想定期将这些视图的数据传输到辅助数据库/不同的实例,然后我还可以在该实例上设置更具体的权限/转换/基于该数据构建的其他视图。我最初提供的观点在如何获得它们方面几乎是固定的 读了一些书后,我觉得应该使用SSIS。我开始构建包,并使用“SSIS导入和导出向导”进行初始传输

我对SQL Server管理相当陌生,目前正在考虑使用SSIS构建解决方案。 我的问题主要是关于“我的逻辑正确吗”以及一些关于最佳实践是什么的小问题

但让我先给你画一幅画

我有一个为我提供DB视图的应用程序,为了减轻数据库的压力,我想定期将这些视图的数据传输到辅助数据库/不同的实例,然后我还可以在该实例上设置更具体的权限/转换/基于该数据构建的其他视图。我最初提供的观点在如何获得它们方面几乎是固定的

读了一些书后,我觉得应该使用SSIS。我开始构建包,并使用“SSIS导入和导出向导”进行初始传输

现在我要问的第一个问题是,这是传输数据的正确方法吗?SSIS是适合这项工作的工具吗

其次,我注意到向导执行了多个SQL预操作任务和数据流任务。 对我来说,将每个成为表的视图拆分为一个单独的SQL预操作任务和一个单独的数据流任务似乎是合乎逻辑的,只是为了保持清晰的画面和尽可能多的控制。虽然这需要一些时间来设置(>100个视图/表),但它似乎比向导仅通过将其中一些视图/表组合在一起来实现的方式更简洁

此外,由于预操作任务已经创建了表,因此在第二次执行时,这些表将失败,因为它们已经存在。除了在每个查询中添加一个IFEXISTS子句外,是否还有其他快速解决方法

如果我完全是从错误的方向来处理这个问题的话,任何关于这个问题的想法都会得到赞赏,或者暗示会有更好的解决方案。 我们的想法是稍后向系统中添加一些SSA,并对这些表/数据提供一些数据分析


谢谢

如果要将数据传输到其他实例,SSIS可能是最佳选择。下一个问题是确定是每次导入所有数据,还是只导入新的/更新的项目

如果您每次都导出所有数据,这会简单得多,并且假设您有一个合适的维护窗口(例如过夜),您可以在不影响最终用户的情况下完成此过程,您只需截断数据并重新加载即可。这显然会导致数据传输量增加

如果只想导出新的/更新的数据,那么现在需要确定是否可以确定哪些行是新的或不同的,而无需简单地将它们与辅助数据库中的数据进行比较。理想情况下,源表将有一个可靠的
LastUpdateDate
列,或者更好的是有一个
rowversion
列,使用该列,您可以导出所有具有比在辅助实例中的对应表中看到的更新值的行

关于只更新的路线,有很多阅读要做,对此我强烈建议你

您还正确地认为,当您想要对大量类似对象执行简单操作时,会有大量重复性任务,例如将
ifexists
添加到您的帖子中的表创建中。我发现解决这个问题的最佳方法是学习如何使用元数据自动化重复任务


祝你好运

也许我把那句话拼错了。我正在从多个源视图创建多个表,每个视图都有完全不同的列/数据类型,但它们只是来自同一个源数据库。感谢您提供的信息。然而,这是否意味着为每个表拆分每个准备任务和数据流任务有意义/是最佳实践?还是将它们结合起来更有意义?@DirkR。我想说的是,这很大程度上取决于个人偏好和解决方案的需求。就个人而言,我更喜欢提取所有内容,然后在可能的情况下进行转换,以保持简单,尽管这并不总是可能或明智的,这取决于您的情况。我建议你设计一些方法来做你想做的事情,然后选择一个看起来最合适的。通过这种方式,您还将强制自己查看不同的方法,从而了解更多信息。好的开始方式是:从视图A(DB1)获取数据并将其转储到表A(DB2),从视图B(DB1)获取数据并将其转储到表B(DB2)然后安排一个包,以我们随后决定的频率更新/替换数据。(目前还没有转换)问题是,我对SSIS还相当陌生,我有一种感觉,如果我现在设置不正确,它将永远困扰着我:)我也在学习一门课程,但总是很高兴听到与它有实际工作经验的人的声音。@DirkR。这很简单,所以不要太担心或想得太多。正如我在回答中所说,第一个问题是您是否有一个可以运行更新的维护窗口?如果是这样,您可以将数据传输到
DB2
上的暂存环境中,如果成功,则
截断目标表并从暂存加载。如果没有,您需要考虑如何在对用户影响尽可能小的情况下更新数据。