Этот вопрос был с 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)?