4

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 に複数の更新 (および挿入) を送信するために推奨される代替方法は何ですか?

4

1 に答える 1

3

はい、タイプを作成する必要があります。

代わりに、大きな文字列の SQL バッチを送信するか、XML を sprocs に渡します。

大きな SQL 文字列バッチの欠点は、SQL proc キャッシュが壊れて、SQL が再コンパイルされる可能性があることです。特に、入力データがその大きな文字列の一部であるためにバッチが一意である場合はそうです。定義上、各バッチは一意です。

TVP が登場する前は、XML が主な代替手段でした。XML の欠点の 1 つは、少なくともしばらくの間、sql azure がそれをサポートしていなかったため (変更される可能性がありますか?)、選択肢が制限されていることです。

TVPはこれを行う方法のようです。私たちのプロジェクトは、TVP を使用するように変換されました。

それが役立つことを願っています。

于 2011-09-25T14:33:21.827 に答える