0

テーブルの特定の列のみが更新されるように制御するにはどうすればよいですか?

私の方法は次のとおりです。これらのテーブルの更新トリガーの代わりに作成し、更新可能な列のみを更新するように制御し、更新された場合、更新不可能な列は適切なメッセージでエラーを発生させます。

4

2 に答える 2

1

はい、トリガーを使用してそれを達成できますが、トリガーを使用しないでくださいINSTEAD OFFOR UPDATE更新クエリ全体を書き直す必要がないため、トリガーをより適切に使用できます。許可されていない更新を拒否するだけです。アクションが許可されている場合、エラーはスローされないため、データは通常どおり更新されます。

例:

CREATE TRIGGER [dbo].[CheckUpdate] ON [dbo].[MyTable] FOR UPDATE AS

DECLARE @EXPECTED INT = (SELECT COUNT(0) FROM INSERTED)
DECLARE @ALLOWED INT = (
   SELECT COUNT(0)
   FROM INSERTED i 
   INNER JOIN DELETED d 
   ON i.Id = d.Id
   WHERE i.Name = d.Name -- The readonly column
) 

IF(@EXPECTED <> @ALLOWED) -- True if there are not allowed records to updated
BEGIN
    -- Prevent the record will be updated
    RAISERROR ('Readonly columns cannot be changed',11, 1);
    ROLLBACK
END
--Do nothing in the ELSE because everything seems to be OK
--(the record will be updated)

Stored Proceduresを使用して、特定のテーブルの更新を制御することもできます。

于 2012-06-06T11:32:55.060 に答える
0

データベースへの更新を制限する場合は、通常、更新および挿入用のストアド プロシージャを作成し、ストア プロシージャのみを使用してデータを更新します。テーブルの更新は使用しません。

于 2012-06-06T11:32:02.880 に答える