2017-03-31 10 views
0

郵便番号の列も更新されていない限り、顧客のアドレス列を更新することはできません。他のものなしで更新しようとすると、トリガが起動し、ユーザにエラーメッセージが表示されます。他の列の変更なしで列の変更を防止する

Microsoft SQL Server 2012でこれをどのように行うことができるかについてのご支援をいただければ幸いです!

+0

アプリケーションレベルで処理する必要があり、データベースレベルでは処理しないでください。 –

答えて

1

あなたが外(この更新がバッチで起こることができれば、あなたは各レコードをループする必要があることを

CREATE TRIGGER [dbo].AU_MyTrigger ON [dbo].MyTable 
FOR UPDATE 
AS 
BEGIN 
    declare @bu_addr varchar(100) 
    declare @bu_zip varchar(100) 
    declare @au_addr varchar(100) 
    declare @au_zip varchar(100) 

    select @bu_addr = addr, @bu_zip = zip from DELETED 
    select @au_addr = addr, @ay_zip = zip from INSERTED 
    if (@bu_addr <> @au_addr) and (@bu_zip = @au_zip) 
    BEGIN 
     -- update table with old values 
     -- raise error 
    END 
END 

ロジック下記の注意を使用して、トリガーの終わりに古いだけリターンエラーにその値を更新することができますofループ)。その場合、更新された行を反復処理するには、CURSORを使用する必要があります。

ケースは説明したほど簡単ではないかもしれませんが、これは機能するアプローチです。

関連する問題