トリガーについて助けが必要です。私は現在、大学で試験を管理するためのプラットフォームとデータベースを開発しています。これが私の問題です:
プラットフォームに登録されているすべての人を含むスーパータイプ テーブルが 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 列に明示的な値を指定する必要があります。