2009-04-30 3 views

答えて

5

のSQLServerは、ビューに複数のテーブルから更新する列をサポートしていません。 1つのテーブルの列を更新し、変更を送信し、別のテーブルの変更を更新し、変更を再度送信するように、列の変更を分割することで、この問題を回避することができます。また、ストアド・プロシージャを使用して、同じトランザクション内で個別の表を個別に更新することもできます。このストアドプロシージャは、デザイナを使用してデータコンテキストにメソッドとして追加できます。完了時にビューと同じスキーマを戻すと仮定すると、ビューと同じタイプのオブジェクトを戻すことができます。

Reference

あなたがいる限り 次の条件に該当するとして、ビューを介して基本となるベーステーブル の データを変更することができ

更新可能なビュー:UPDATE含む

いかなる修正、 INSERT、およびDELETEステートメントは、 テーブルのうち1つのテーブルからの参照列 を参照する必要があります。 で変更されている列は、表の列にある の基礎データを直接参照する必要があります。集約関数: 列は、次 介するなど、任意 他の方法で導出することができない AVG、COUNT、SUM、MIN、MAX、GROUPING、 STDEV、STDEVP、VAR、およびVARP。 A の計算です。 他の列を使用する式から計算された列は、 になることはできません。集合演算子UNION、 UNION ALL、CROSSJOIN、EXCEPT、および INTERSECTの計算量と を使用して を形成した列も更新できません。 の列は、 GROUP BY句、HAVING句、またはDISTINCT句の影響を受けません。 TOPは、ビューのselect_statement のどこにも使用されていません。WITH CHECK OPTION節付きの 。

1

@ tvanfossonの答えですが、あなたは、LINQからSQLへ、あなたの代わりに、コード内で直接両方のテーブルを参照するオブジェクトのコレクションを取得し、それらを更新し、それらを押し戻すことができます使用している場合は、絶対に正しいです。 updateコマンドを発行すると、LINQ-to-SQLはすべてのコマンドをトランザクションに入れて処理します。

2

第3のオプションは、更新された値を2つの異なるクエリに分割するコードを記述するINSTEAD OFトリガを作成することです。

関連する問題