日期:2014-05-18  浏览次数:20569 次

SQLSERVER触发器问题求救!!!!!!!!!!
我所写的触发器程序如下:  

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