首页 > 解决方案 > 您应该在 SQL Server 2016 中进行多次插入调用还是传递 XML?

问题描述

这个问题来自 2012 年的 SQL Server 2008,我想知道 SQL Server 2016 及更高版本是否仍然相关:您应该进行多次插入调用还是传递 XML?

上述帖子中的论点是preparedocumentandOPENXML是昂贵的调用并且使用起来令人困惑。

这篇文章在一次调用中将数组或记录列表作为 XML 数据保存到 SQL Server似乎与上一篇文章不一致,但也没有提及性能。

我有一个实体,它的子属性EntityTranslationsList<Translations>.

我使用表类型的问题是我发现它在应用程序的 .net 端很笨拙。

设置数据表、列、循环以将每条记录插入表中,然后对新的数据库表类型进行硬编码引用,例如

DataTable translationDataTable = new DataTable("Translation");
translationDataTable.Columns.Add("Name", typeof(string));
translationDataTable.Columns.Add("Description", typeof(string));
translationDataTable.Columns.Add("Language", typeof(string));

foreach (Translation t in entityTranslations)
{
    DataRow newRow = translationDataTable.NewRow();
    newRow["Name"] = entityTranslations.Name;
    newRow["Description"] = entityTranslations.Description;
    newRow["Language"] = entityTranslations.Language;

    translationDataTable.Rows.Add(newRow);
}

List<IDbDataParameter> parameters = new List<IDbDataParameter>
{
    new SqlParameter("@Translations", SqlDbType.Structured)
    {
        TypeName = "dbo.TranslationTableType",
        Value = translationDataTable
    },
    new SqlParameter("CountryCode", countryCode),
};

这是TypeName = "dbo.TranslationTableType",我对 VS的看法

XmlSerializer xml = new XmlSerializer(typeof (List<Translation>));

using (MemoryStream memoryStream = new MemoryStream())
{
    xml.Serialize(memoryStream, entityTranslations);                    

    List<IDbDataParameter> parameters = new List<IDbDataParameter>();
    parameters.Add(new SqlParameter("Translations", Encoding.UTF8.GetString(memoryStream.ToArray())));                    
    parameters.Add(new SqlParameter("CountryCode", countryCode));
}

问题:当通过 XML 与结构表插入多行与许多小插入(并成为 .net 代码端事务的一部分)插入多行时,SQL Server 2016 的性能是否会受到影响?

标签: .netsql-serversql-server-2016

解决方案


推荐阅读