sql server中如何定义触发器
在表tab上定义触发器tri,在对tab插入和更新数据前进行检查。如果所插入或更新的值在100到1000之间,将值设置为50;如果大于1000,则给出新值不允许大于100...
在表tab上定义触发器tri,在对tab插入和更新数据前进行检查。如果所插入或更新的值在100到1000之间,将值设置为50;如果大于1000,则给出新值不允许大于1000的提示信息。下面是书上的SQL语句,可是在SQL SERVER2005中执行时,总是报错。请高手帮忙指导一下。
create trigger tri before update or insert on tab
for each row
as begin
if new.col>100 and new.col<1000 then
new.col:=50;
end if;
if new.col>1000 then
raise exception 'new values can not be more than 1000';
end if;
end; 展开
create trigger tri before update or insert on tab
for each row
as begin
if new.col>100 and new.col<1000 then
new.col:=50;
end if;
if new.col>1000 then
raise exception 'new values can not be more than 1000';
end if;
end; 展开
2个回答
展开全部
--SQL server2000通过测试
--X表,,有A,B,C列。。。
--以下是insert的trigger,,update也差不多是这样。。改一下就好了
create trigger Tri_insert on x for insert
as
begin
declare
@Field1 int,
@Field2 int,
@field3 int
SELECT @Field1=a,@FIELD2=b,@field3=c FROM INSERTED
if @Field1>100 and @Field1<1000
update x set a=50 where (a=(select a from (SELECT a,b,c FROM INSERTED)as tab))and(b=(select b from (SELECT a,b,c FROM INSERTED)as tab))
and(c=(select c from (SELECT a,b,c FROM INSERTED)as tab))
if @field1>1000
begin
delete from x where (a=(select a from (SELECT a,b,c FROM INSERTED)as tab))and(b=(select b from (SELECT a,b,c FROM INSERTED)as tab))
and(c=(select c from (SELECT a,b,c FROM INSERTED)as tab))
raiserror( 'new values can not be more than 1000',16,1)
end
end
--X表,,有A,B,C列。。。
--以下是insert的trigger,,update也差不多是这样。。改一下就好了
create trigger Tri_insert on x for insert
as
begin
declare
@Field1 int,
@Field2 int,
@field3 int
SELECT @Field1=a,@FIELD2=b,@field3=c FROM INSERTED
if @Field1>100 and @Field1<1000
update x set a=50 where (a=(select a from (SELECT a,b,c FROM INSERTED)as tab))and(b=(select b from (SELECT a,b,c FROM INSERTED)as tab))
and(c=(select c from (SELECT a,b,c FROM INSERTED)as tab))
if @field1>1000
begin
delete from x where (a=(select a from (SELECT a,b,c FROM INSERTED)as tab))and(b=(select b from (SELECT a,b,c FROM INSERTED)as tab))
and(c=(select c from (SELECT a,b,c FROM INSERTED)as tab))
raiserror( 'new values can not be more than 1000',16,1)
end
end
展开全部
SQL Server 好像不支持 for each row
而且 SQL Server 里面也没有 new. 与 old.
更新后/前,是通过 inserted deleted 来处理的。
你这个书的代码,看上去应该是 Oracle 的书。
Oracle 触发器例子:
http://hi.baidu.com/wangzhiqing999/blog/item/2348e20a399e1dc47bcbe18f.html
SQL Server 触发器例子:
http://hi.baidu.com/wangzhiqing999/blog/item/126bdc0c7a7dd79b0a7b829d.html
而且 SQL Server 里面也没有 new. 与 old.
更新后/前,是通过 inserted deleted 来处理的。
你这个书的代码,看上去应该是 Oracle 的书。
Oracle 触发器例子:
http://hi.baidu.com/wangzhiqing999/blog/item/2348e20a399e1dc47bcbe18f.html
SQL Server 触发器例子:
http://hi.baidu.com/wangzhiqing999/blog/item/126bdc0c7a7dd79b0a7b829d.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询