1

シナリオ:

「Test」という名前の Sql Server 2012 テーブルには 2 つのフィールドがあります。"CounterNo" と "Value" はどちらも整数です。

sq1、sq2、sq3、sq4 という名前の定義された 4 つのシーケンス オブジェクトがあります。

挿入でこれらを実行したい:

  • CounterNo = 1の場合、Value = sq1の次の値
  • CounterNo = 2の場合、Value = sq2の次の値
  • CounterNo = 3の場合、Value = sq3の次の値

カスタム関数を作成して、値フィールドのデフォルト値として割り当てます。しかし、カスタム関数を試してみると、「シーケンスオブジェクトの次の値」がサポートされていません

別の方法は、トリガーを使用することです。そのテーブルにはすでにトリガーがあります。

挿入にストアド プロシージャを使用するのが最善の方法です。しかし、EntityFramework 5 Code-First はそれをサポートしていません。

これを達成する方法を教えてください。

(カスタム関数でそれを行う方法を教えていただければ、ここに投稿することもできます。それは私の別の質問です。)

更新: 実際には、そのテーブルには 23 のフィールドがあり、主キーも設定されています。「カウンター テーブル」を使用して、ソフトウェア側でこのカウンター値を生成しています。クライアント側でカウンター値を生成するのは良くありません。

4 つのシーケンス オブジェクトをカウンターとして使用しています。これは、さまざまな種類のレコードを表すためです。

同じレコードで同時に 4 つのカウンターを使用すると、それらすべてが次の値を生成します。関連するカウンターのみが次の値を生成し、他のカウンターは同じままである必要があります。

4

3 に答える 3

0

4 つの異なるタイプのレコードがある場合は、4 つの異なるテーブルを使用し、identityそれぞれに別の列を配置します。

すべてのデータをまとめて表示する必要がある場合は、ビューを使用してそれらを結合します。

create v_AllTypes as
    select * from type1 union all
    select * from type2 union all
    select * from type3 union all
    select * from type4;

または、出力でシーケンス番号の計算を行います。

select t.*,
       row_number() over (partition by CounterNo order by t.id) as TypeSeqNum
from AllTypes t;

4 つの ID 列に対する条件付き更新が必要な場合、データ モデルに問題があるようです。

于 2013-09-08T15:19:28.903 に答える