除非邮政编码列也更新,否则不应允许任何人更新客户地址列。如果尝试更新一个而不另一个,则会触发一个触发器,并显示一条错误消息。
有关如何在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
请注意,如果此更新可以批量发生,则需要循环遍历每条记录并将其值更新为old,并且仅在触发结束时(循环外)返回错误。在这种情况下,要迭代更新的行,您需要使用CURSOR
你的情况可能不像我解释的那么容易,但这是有效的方法。