Вы должны сделать несколько вызовов вставки или передать XML на SQL Server 2016? - PullRequest
0 голосов
/ 26 марта 2020

Этот вопрос был с 2012 года для SQL Server 2008, и мне интересно, если с SQL Server 2016 и выше он все еще актуален: Если вы сделаете несколько вызовов вставки или передадите XML?

Аргумент в вышеприведенном посте состоит в том, что preparedocument и OPENXML являются дорогостоящими вызовами и сбивают с толку работать.

Этот пост Сохранить массив или список записей как XML Data To SQL Сервер за один вызов , кажется, не согласен с предыдущим постом, но также ничего не упоминает о производительности.

У меня есть объект с дочерними свойствами EntityTranslations, который является List<Translations>.

Моя проблема с использованием табличного типа заключается в том, что я считаю его неуклюжим на. net сторона приложения.

Настройка dataTable, столбцов, цикл для вставки каждой записи в таблицу, затем жестко запрограммированная ссылка на новый тип таблицы базы данных, что-то вроде

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));
}

Вопрос: есть ли снижение производительности с SQL Server 2016 при вставке нескольких строк с помощью XML против таблицы структуры против многих небольшие вставки (и являющиеся частью транзакции на стороне кода. net)?

...