2

トリガーについて助けが必要です。私は現在、大学で試験を管理するためのプラットフォームとデータベースを開発しています。これが私の問題です:

プラットフォームに登録されているすべての人を含むスーパータイプ テーブルが 1 つあります。「候補者」と「審査官」の機能を各人ごとに区別できなければなりません。したがって、すべての受験者用とすべての試験官用の 2 つのサブタイプ テーブルがあります。それを達成するために、挿入トリガーを使用しています。

さらに、人は候補者と試験官の両方になることができますが、同時にはできません。そのため、スーパータイプ テーブルを更新した後、2 つのサブタイプ テーブルの一方から特定の行を削除し、もう一方にユーザー情報を挿入できるトリガーも必要です。

これら 3 つのテーブルの単純化された設計を次に示します。

ここに画像の説明を入力

私のINSERTトリガー:

ALTER TRIGGER [dbo].[role_insert]   
ON [dbo].[alemp_persons]  
FOR INSERT  
AS
  DECLARE @random_number int
  SELECT @random_number = CAST(CAST(rand() as binary(2)) as int)
BEGIN
  INSERT INTO dbo.alemp_candidates 
  ( 
  id_person, random_number
  )  
  SELECT id_person, @ random_number
  FROM INSERTED  
  WHERE function='Candidate'

  INSERT INTO dbo.alemp_examiners
  (  
  id_person
  )  
  SELECT id_person
  FROM INSERTED  
  Where function='Examiner'
END
GO

私のUPDATEトリガー:

ALTER TRIGGER [dbo].[role_update] ON [dbo].[alemp_persons]
AFTER UPDATE
AS
  DECLARE @id_person int 
  DECLARE @newFunction int SELECT @newFunction=function FROM inserted
  DECLARE @random_number int SELECT @ random_number = CAST(CAST(rand() as binary(2)) as int)

IF @newFunction = 'Candidate'
BEGIN
  DELETE
  FROM dbo.alemp_examiners
  WHERE id_person=@id_person
END

BEGIN
  SET IDENTITY_INSERT dbo.alemp_candidates ON;
  INSERT INTO dbo.alemp_candidates  
  (  
  id_person, random_number
  )  
  SELECT  @id_person, random_number
  SET IDENTITY_INSERT dbo.alemp_candidates OFF;
END

IF @newFunction = 'Examiner'
BEGIN
  DELETE 
  FROM dbo.alemp_candidates
  WHERE id_person=@id_person
END

BEGIN
  SET IDENTITY_INSERT dbo.alemp_examiners ON;
  INSERT INTO dbo.alemp_examiners
  (  
  id_person
  ) 
  SELECT  @id_person
  SET IDENTITY_INSERT dbo.alemp_examiners Off;
END
GO

上で述べたように、INSERT トリガーは思い通りに機能します。しかし、一人の機能を更新したいとき、エラーが発生しました:

IDENTITY_INSERT が ON に設定されている場合、またはレプリケーション ユーザーが NOT FOR REPLICATION ID 列に挿入している場合は、ID 列に明示的な値を指定する必要があります。

4

1 に答える 1