Обработка нескольких обновлений БД из c # в SQL Server 2008 - PullRequest
4 голосов
/ 25 сентября 2011

Мне нравится находить способ обрабатывать несколько обновлений базы данных sql (с одним обходом в одну базу данных).Я читал о табличных параметрах в SQL Server 2008 http://www.codeproject.com/KB/database/TableValueParameters.aspx, которые кажутся действительно полезными.Но, похоже, мне нужно создать хранимую процедуру и тип таблицы для ее использования.Это правда?Возможно из-за безопасности?Я хотел бы выполнить текстовый запрос просто так:

var sql = "INSERT INTO Note (UserId, note) SELECT * FROM @myDataTable";
var myDataTable = ... some System.Data.DataTable ...
var cmd = new System.Data.SqlClient.SqlCommand(sql, conn);
var param = cmd.Parameters.Add("@myDataTable", System.Data.SqlDbType.Structured);
param.Value=myDataTable;
cmd.ExecuteNonQuery();

Итак

A) мне нужно создать хранимую процедуру и тип таблицы для использования TVP?и
B) какой альтернативный метод рекомендуется для отправки нескольких обновлений (и вставок) на SQL Server?

1 Ответ

3 голосов
/ 25 сентября 2011

Да, вам нужно создать типы.

В качестве альтернативы можно отправить большую строку SQL-пакета или передать XML в sprocs.

Недостатком больших пакетов строк SQL является то, что он может разрушить кэш процедур SQL и вызвать перекомпиляцию SQL, особенно если пакет является уникальным, поскольку входные данные являются частью этой большой строки.По определению, каждая партия будет уникальной.

XML был основной альтернативой перед TVP.Единственный недостаток XML, по крайней мере некоторое время, sql azure не поддерживал его (что может измениться?), Поэтому он ограничивает ваши возможности.

TVP, кажется, способ сделать это.Наш проект только что перешел на использование TVP.

Надеюсь, это поможет.

...