1

値を持つ次のテーブルがあるとしましょう

StudentNumber      StudentName       Class
---------------------------------------------
      0              'A'              100              
      1              'B'              100              
      0              'C'              200              
      1              'D'              200              
      2              'E'              200                    

StudentNumberクラス番号に関連するシーケンスとして機能することを宣言したい。

だから私が挿入StudentName='F'し た場合

  • クラス 100 に 2 を割り当てます
  • クラス 200 に 3 を割り当てます
  • クラス 300 に 0 を割り当てます

インデックスを使用できない場合。挿入コマンドで「クラスごとに最大を選択する」ことは可能ですか。

(デッドロックなどを避けるために、単一のコマンドで実行することを好みます)

4

1 に答える 1

1

これは私にとってはうまくいきます(SQL Server 2005)。最初に変数を設定するこのアプローチがニーズを満たさない場合は、これを挿入トリガーとして実行し、名前とクラスの値を挿入することを検討してください。DB はその後、studentNumber 値を提供できます。

CREATE TABLE t_sw (
studentNumber INT,
studentName VARCHAR(MAX),
class INT
)
GO


DECLARE @name VARCHAR(MAX)
DECLARE @class INT

SET @name = 'F'
SET @class = 300

INSERT INTO t_sw (studentNumber, studentName, class)
SELECT  COALESCE(MAX(studentNumber) + 1, 0), @name, @class
FROM    t_sw
WHERE   class = @class

SELECT * FROM t_sw
于 2013-07-01T08:15:09.613 に答える