SQL数据库的一个约束或是触发器

来源:百度知道 编辑:UC知道 时间:2024/09/20 09:19:44
一个表A中有三列,A1,A2,A3
现在需要实现一个功能,当试图修改A3的值时,首先检查A1和A2的值,如果A1=1并且A2=2,那么,不允许修改A3的值,要怎么做?
要求不要在UPDATE语句中实现此功能,我需要一个约束或是触发器,谢谢帮忙.

update 表A set A3= where A1<>1 and A2<>2

--这是个触发器
create TRIGGER [dbo].[updateA3]
ON [dbo].[表A]
for UPDATE
AS
begin
if (select count(*) from inserted where A1=1 and A2=2)>0
rollback;
end

这个看起来简单。
应该在触发器里用到游标吧。

----补充
说明下考虑到这里a1,a2会重复。我建了个这样的表
--建表
create table test(
xh int primary key,
a1 int,
a2 int,
a3 char(1))

---生成数据
insert into test
select 1,1,2,'a' union all
select 2,1,2,'b' union all
select 3,2,2,'c' union all
select 4,3,2,'d'

--触发器
create trigger trig_test on test
for update
as
begin
declare @xh int
declare @a1 int
declare @a2 int
declare @a3 char(1)

declare cur_old cursor local for
select xh,a3 from deleted where a1 = 1 and a2 = 2
open cur_old
fetch cur_old into @xh,@a3
while(@@fet