正如问题中所说,给定一个大文本文件,如何在不将整个文件内容加载到内存的情况下将其内容放入 sql server 中的 nvarchar(max) 列中(构建动态 sql 语句或作为 SP 参数)?
到目前为止,我最好的解决方案是插入一个空值的行,然后在循环中运行更新,每次在事务中附加数据块。除了将文件复制到数据库服务器并使用 BCP 之外,还有更好的方法吗?某种方式来流式传输数据?
正如问题中所说,给定一个大文本文件,如何在不将整个文件内容加载到内存的情况下将其内容放入 sql server 中的 nvarchar(max) 列中(构建动态 sql 语句或作为 SP 参数)?
到目前为止,我最好的解决方案是插入一个空值的行,然后在循环中运行更新,每次在事务中附加数据块。除了将文件复制到数据库服务器并使用 BCP 之外,还有更好的方法吗?某种方式来流式传输数据?
从 .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();
}