5

次のようなテーブルがあります。

CREATE TABLE Users
(

    idUser int IDENTITY(1,1) PRIMARY KEY,
firstName varchar(40) NOT NULL,
secondName varchar(40),
lastName varchar(70) NOT NULL,
position varchar(80),
section varchar(80) NOT NULL
)

そして、誰かがユーザーの 1 つだけを削除する必要があります。最初の行が削除されないようにするにはどうすればよいですか? 再挿入できません。最初の行には idUser = 1 が必要です。

4

3 に答える 3

4

テーブル [Users] にトリガーを作成して、このテーブルからレジスターが削除されるのを監視できます。したがって、削除が userId:1 であるかどうかを確認し、それ以外の場合は削除しません。コードは次のとおりです。

CREATE TRIGGER sampleTrigger
    ON [Users]
    INSTEAD OF DELETE
AS
    IF EXISTS(SELECT * FROM deleted WHERE idUser IN (1))
    BEGIN
        RAISERROR ('Is not allowed to delete idUser: 1',16, 1)  
    END
    ELSE
    BEGIN
        DELETE [Users] WHERE idUser IN (SELECT idUser FROM deleted)
    END
GO
于 2013-11-02T16:36:59.630 に答える
0

この場合、ユーザーがレコードを削除した場合にユーザーの詳細がそのテーブルに挿入される場合に備えて、各ユーザーのレコードを保持する別の「監査」テーブルが必要になります。また、監査テーブルにチェックインする代わりに削除トリガーをユーザーに作成します。そのユーザーの詳細が監査テーブルに存在する場合は、それ以上の削除を防ぎます。監査テーブルに存在しない場合は、レコードの削除を許可し、このユーザーの監査テーブルに行を追加して、このユーザーからのそれ以上の削除を防ぎます。

于 2013-11-02T16:23:59.807 に答える
-1

このようなロジックは、ビジネス (ロジック) レイヤーに配置する必要があります。
削除するユーザーが UID=1 でないことを確認します

于 2013-11-02T16:24:35.587 に答える