MS SQL Server-批量插入网络




sql-server database (4)

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

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

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

其他人可以告诉我,如果有更好的办法做到这一点,或者如果不是,哪一个最有意义,为什么?


如果文件足够小,那么ftp选项可能会起作用(你将在你的数据库框中有一个副本)。 但是,如果你在两跳之间有一个千兆位网络,那么我不会看到太多的问题。


我不知道关于2k08,因为有一些额外的实用程序来复制服务器之间的文件。 FTP将是两者中较快的,因为它不使用窗口的文件系统来传输文件。 (有开销,但除非文件很大,否则可能忽略不计)。 不使用共享还有其他一些优点,例如远程服务器在文件崩溃时访问。

我不同意cmartin关于添加一个开放的共享数据库服务器。 一般来说,你不想打开文件共享数据库服务器,因为它通常被认为是一个安全风险,很多地方不会允许它。 这是说,它会否定你将文件转移到另一个位置使用批量导入。


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

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

这是我为我的客户做的,他们也同意这个简单的诀窍。


我仍然在寻找在MS SQL中这样做的方法,但我在MySQL中做的是将CSV作为BLOB保存在临时表中,在DB服务器本地的目录中运行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();






bulk