次のようなテーブルがあるとします。
CREATE TABLE [dbo].[TBL_XML]
(
[XmlFileID] [BIGINT] IDENTITY (1, 1) NOT NULL,
[FileName] [NVARCHAR](500) NULL,
[XmlData] [XML] NULL,
[DateCreated] [DATETIME] NOT NULL,
)
テーブルを埋めるために現在使用している方法は次のとおりです。
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandText = @"INSERT INTO [dbo].[TBL_XML]
( [XmlData] ,
[FileName] ,
[DateCreated]
)
VALUES (@XMLData, @FileName, GETDATE())";
using (var xmlReader = new XmlTextReader(new FileStream(item.XmlFileName, FileMode.Open)))
{
cmd.Parameters.Add("@FileName", SqlDbType.NVarChar, 500).Value = System.IO.Path.GetFileName(item.XmlFileName);
cmd.Parameters.Add(
new SqlParameter("@XMLData", SqlDbType.Xml)
{
Value = new SqlXml(xmlReader)
});
SetConnectionParameters(cmd);
cmd.ExecuteScalar());
}
}
ただし、ファイル全体がメモリに読み込まれ、OutOfMemory 例外が発生するため、これは非常に大きな XML では機能しません。
サーバーとは別のマシンで実行されている .net アプリケーションから、大きな (>100MB) XML ファイルを XMLData 列に挿入する最善の方法は何ですか?
SQL サーバーは XML ファイルにアクセスできないため、一括挿入は問題外です。