关于数据库触发器,更新触发的问题(急!能用即给分)
小弟写了一个表更新时的处罚器代码如下:
CREATE TRIGGER [UpdateMySql] ON [dbo].[Employee]
FOR UPDATE
AS
begin
SET XACT_ABORT ON
declare @Em_ID varchar(20),@Em_name varchar(50),@secDep varchar(20)
select @Em_ID=Em_id,@Em_name=Em_name,@secDep=Dept_id from Inserted;
if @Em_name is not null
begin
if update(Em_name)
begin
update OPENROWSET('MSDASQL','DRIVER={MySQL ODBC 3.51 Driver};SERVER=192.0.0.97;PORT=3306;DATABASE=piaowu4_0_1;USER=root;PASSWORD=a;STMT=set names gb2312;OPTION=2049','select * from piaowu4_0_1.tbl_people') set [col_name]=@Em_name
where col_certNo=@Em_ID
end
end
if @Em_ID is not null
begin
if update(Dept_id)
begin
select @secDep=Dep_name from Department where Record_id=rtrim(@secDep);
select @secDep=isnull(rtrim([col_objId]),'1') from OPENROWSET('MSDASQL','DRIVER={MySQL ODBC 3.51 Driver};SERVER=192.0.0.97;PORT=3306;DATABASE=piaowu4_0_1;USER=root;PASSWORD=a;STMT=set names gb2312;OPTION=2049','select * from piaowu4_0_1.tbl_seconddept') where [col_name]=rtrim(@secDep)
update OPENROWSET('MSDASQL','DRIVER={MySQL ODBC 3.51 Driver};SERVER=192.0.0.97;PORT=3306;DATABASE=piaowu4_0_1;USER=root;PASSWORD=a;STMT=set names gb2312;OPTION=2049','select * from piaowu4_0_1.tbl_people') set fk_secondDeptId=convert(int,rtrim(@secDep))
where col_certNo=@Em_ID
end
end
if @@error<>0
rollback;
SET XACT_ABORT OFF
end
作用是更新MySql数据库中的表!
其中有时更新Em_name字段,有时更新dep_id字段,但是提示错误(无法为更新定位行,一些值可能在最后一次读取后更改!)但是当我把其中(if @Em_name is not null
begin
if update(Em_name)
begin
update OPENROWSET('MSDASQL','DRIVER={MySQL ODBC 3.51 Driver};SERVER=192.0.0.97;PORT=3306;DATABASE=piaowu4_0_1;USER=root;PASSWORD=a;STMT=set names gb2312;OPTION=2049','select * from piaowu4_0_1.tbl_people') set [col_name]=@Em_name
where col_certNo=@Em_ID
end
end)阴掉之后就可以了!快帮小弟解决呀!