我所写的触发器程序如下:
create trigger war on warning
(
after insert or update on stock
for each row
as begin
if stock.s_amount <medicine.m_lowerlimit then
insert into warning values (1,stock.s_mid, "药品已到最低限度了,请及时进药. ",stock.s_amount);
end if;
if stock.s_amount> medicine.m_upperlimit then
insert into warning values (2,stock.s_mid, "药品已到蝗高限度了,请暂缓进药. ",stock.s_amount);
end if;
end;
)
提示的错误如下:
服务器: 消息 170,级别 15,状态 1,过程 war,行 2
第 2 行: '( ' 附近有语法错误。
服务器: 消息 156,级别 15,状态 1,过程 war,行 6
在关键字 'then ' 附近有语法错误。
服务器: 消息 128,级别 15,状态 1,过程 war,行 7
在此上下文中不允许使用 's_mid '。此处只允许使用常量、表达式或变量。不允许使用列名。
服务器: 消息 156,级别 15,状态 1,过程 war,行 9
在关键字 'then ' 附近有语法错误。
服务器: 消息 128,级别 15,状态 1,过程 war,行 10
在此上下文中不允许使用 's_mid '。此处只允许使用常量、表达式或变量。不允许使用列名。
请高手给解答一下.先谢谢了.
------解决方案--------------------
create trigger war on warning
(
after insert or update on stock
for each row
as
if stock.s_amount <medicine.m_lowerlimit
begin
insert into warning(字段1,字段2,字段3,字段4)
values(1,stock.s_mid, "药品已到最低限度了,请及时进药. ",stock.s_amount)
end
if stock.s_amount> medicine.m_upperlimit
begin
insert into warning (字段1,字段2,字段3,字段4)
values (2,stock.s_mid, "药品已到蝗高限度了,请暂缓进药. ",stock.s_amount);
end
)
------解决方案--------------------
CREATE TRIGGER trigger_name
ON { table | view }
[ WITH ENCRYPTION ]
{
{ { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
[ WITH APPEND ]
[ NOT FOR REPLICATION ]
AS
[ { IF UPDATE ( column )
[ { AND | OR } UPDATE ( column ) ]
[ ...n ]
| IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask )
{ comparison_operator } column_bitmask [ ...n ]
} ]
sql_statement [ ...n ]
}
}
------解决方案--------------------
把你的表结构按原来顺序写全了
create trigger war on stock after insert,update as
begin
insert warning select '1 ',a.s_mid, '药品已到最低限度了,请及时进药. ',a.s_amount
from inserted a,medicine b where a.s_mid=b.s_mid and a.s_amount <b.lowerlimit
insert warning select '2 ',a.s_mid, '药品已到蝗高限度了,请暂缓进药. ',a.s_amount
from inserted a,medicine b where a.s_mid=b.s_mid and a.s_amount> b.upperlimit
end