8

正如问题中所说,给定一个大文本文件,如何在不将整个文件内容加载到内存的情况下将其内容放入 sql server 中的 nvarchar(max) 列中(构建动态 sql 语句或作为 SP 参数)?

到目前为止,我最好的解决方案是插入一个空值的行,然后在循环中运行更新,每次在事务中附加数据块。除了将文件复制到数据库服务器并使用 BCP 之外,还有更好的方法吗?某种方式来流式传输数据?

4

1 回答 1

4

从 .net4.5 开始,SqlParameters 支持TextReader https://msdn.microsoft.com/en-us/library/hh556234(v=vs.110).aspx

using (SqlConnection conn = new SqlConnection(connection_string))
using (SqlCommand cmd = conn.CreateCommand())
using (FileStream file = File.OpenRead(@"C:\temp\bigtextfile.txt"))
{
    cmd.CommandText = "INSERT INTO RandomTable (TextBlob) VALUES (@text)";
    cmd.Parameters.Add("@text", System.Data.SqlDbType.NVarChar, -1).Value = file;
    conn.Open();
    cmd.ExecuteNonQuery();
}
于 2013-07-25T19:10:28.707 回答