Обработка нескольких обновлений БД из c# в SQL Server 2008


Я хотел бы найти способ обрабатывать несколько обновлений в БД 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();

Итак

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

1 4

1 ответ:

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

Альтернативой является отправка пакета sql с большой строкой или передача XML в sprocs.

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

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

TVPs, похоже, является способом сделать это. Наш проект только что перешел на использование ТВП.

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