我编写了一个VBScript,用于将Active Directory中的数据提取到记录集中。我现在想知道将数据传输到SQL数据库的最有效方法是什么。
我被撕裂了;
INSERT
命令后一种选择是否会导致3000多次往返与数据库通信,因此两种选择中的较慢?
答案 0 :(得分:2)
逐行发送插入始终是最慢的选项。这就是所谓的Row by Agonizing Row或RBAR。如果可能,您应该避免这种情况并利用基于集合的操作。
您的另一个选择,写入中间文件是一个不错的选择,我同意@Remou在评论中您应该选择CSV而不是Excel,如果您要选择此选项。
我会提出第三种选择。您已经在VBscript中包含了VB中的设计。您应该能够轻松地将其转换为SSIS中的脚本组件。创建一个SSIS包,添加一个DataFlow任务,向流中添加一个脚本组件(as a datasource {example here}),将您的字段写入输出缓冲区,然后添加一个sql目标并自己保存写入中间件的步骤文件。这也更安全,因为在此过程中,您在任何地方都没有以明文形式存储AD数据。
答案 1 :(得分:0)
你没有提到这种情况经常发生的频率,或者你是否必须在某个时间窗口内运行它,因此不清楚性能在这里是否是一个问题。 “慢”并不意味着任何事情:如果时间窗口是一小时,那么运行30分钟的过程是完全可以接受的。
只需编写最简单,最易维护的代码即可完成工作并从那里开始。如果它在可接受的时间内运行,那么你就完成了。如果没有,那么至少你有一个干净,有效的解决方案,你可以分析和优化。
答案 2 :(得分:0)
如果您已经在数据集中拥有它,并且它是SQL Server 2008+创建user defined table type并将整个数据集作为原子单位发送。
如果你走SSIS路线,我的帖子有Active Directory as an SSIS Data Source