5

我有一个使用 MS SQL Server 的应用程序,我需要从文件中进行批量插入。症结在于数据库和我的应用程序将托管在不同的服务器上。通过网络进行批量插入的最佳方法是什么?到目前为止,我提出了两个想法:

  1. 从应用服务器共享数据库服务器可以找到的目录,并使用远程文件中的批量插入语句进行导入

  2. 从 db 服务器运行 FTP 服务器 - 执行导入时,只需将文件 ftp 到 db 服务器并使用本地文件的批量插入进行导入(我倾向于此选项)。

谁能告诉我是否有更好的方法来做到这一点,或者如果没有,哪一个最有意义,为什么?

4

5 回答 5

2

我以前做过,并尝试了两种选择。

最后,我做了与选择1相反的事情。在数据库服务器上共享一个应用程序可以找到的目录。您不必在批量插入期间处理带宽问题。

如果您特别关注安全性或可传输性,则 FTP 服务器选项会起作用。

最后一个选择(非常小心)是使用带有本地化 SQL 服务器的 DTS。它可能更安全。如果你做错了,效率会低得多。

于 2009-01-13T19:04:07.327 回答
1

我仍在寻找一种在 MS SQL 中执行此操作的方法,但我在 MySQL 中所做的是将 CSV 作为 BLOB 保存在临时表中,在数据库服务器本地的目录中运行 SELECT ... INTO DUMPFILE,然后在该本地文件上运行常规的 LOAD DATA 语句(编辑:我觉得我应该指出,这是在 LOAD DATA LOCAL 可用之前)。

我认为spWriteStringToFile会做到这一点。

编辑:我正在做某事。

comm.CommandText = @"EXEC spWriteStringToFile @data, 'c:\datadumps', 'data.csv';
    BULK INSERT my_table FROM 'c:\datadumps\data.csv';";
comm.Parameters.AddWithValue("data", File.ReadAllText(path));
comm.ExecuteNonQuery();
于 2011-10-21T18:14:11.530 回答
0

I am not sure about 2k08 as there are some additional utilities to copy files between servers. FTP will be the faster of the two, because it doesn't use the window's file system to transfer the file. (there is overhead, but unless the file is large it might be negligible). There are other advantages to not using a share, such as the remote server with the file crashing mid-access.

I disagree with cmartin about adding an open share to the db server. Generally you don't want to open file shares to the db server as it is generally considered a security risk, and a lot of places won't allow it. That being said it would negate you having transfer the file to another location to use the bulk import.

于 2009-01-13T19:10:35.847 回答
0

如果文件足够小,则 ftp 选项可能会起作用(您的数据库框中将有一个副本)。但是,如果您在两者之间有一个单跳千兆网络,那么我认为选项 1 没有太大问题。

于 2009-01-13T19:02:24.350 回答
0

实际上,您可以将文件放在应用程序和数据库服务器上。

两个文件必须是相同的路径。从应用程序服务器,目的仅用于选择。数据库服务器用于批量插入。

这就是我为我的客户所做的,他们也同意这个简单的技巧。

于 2012-03-30T03:45:08.027 回答