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

跪求触发器写法
一个BS系统,客户端是CDMA上网,速度只有3K,经常掉线,现在要求客户对表格修改\删除\增加时,如果操作发出后就断线,那么服务器就取消客户操作,即如果没有接收到客户端操作成功的反馈消息就执行回滚操作.谢谢各位,万分火急

------解决方案--------------------
不用在服务器的触发器中判断吧?

begin tran
insert into 表
select '11 '
if @@rowcount> 0 and @@error=0
commit tran
else
rollback tran
------解决方案--------------------
怎么能知道断线?你用什么判断的?至于回滚很好做。
无线方式的断线是非常难判断的。

------解决方案--------------------
用程序判断
如果存在记录提示是否更新
如果不存在记录就更新
------解决方案--------------------
同意楼上的,只有在程序中调用这个数据库的关键字段,
if 记录存在 then
..提示更新
else
..调用更新
end if
把记录字段存在与否与客户端是否返回成功相关联,如查返回不成功,执行触发器回滚操作。
------解决方案--------------------
现在是因为客户端经常掉线,常常出现操作者把一项操作执行几次
------------------------------------------
在插入,更新和删除前行判断是否条件满足.

begin tran
insert into 表
select * from 表1
where id not in (select id from 表) --加个类似这样的条件
if @@rowcount> 0 and @@error=0
commit tran
else
rollback tran

------解决方案--------------------
例子
==================================================================================
CREATE TRIGGER RegAccList_InsUpd ON RegAccList
FOR INSERT, UPDATE
AS
BEGIN
DECLARE @Curtain char
IF UPDATE(IntelCode) OR UPDATE(CName) OR UPDATE(NUM) OR UPDATE(price)
BEGIN
SELECT @Curtain = Curtain FROM RegAccount A INNER JOIN inserted I ON A.dj_id =

I.dj_id
IF @Curtain <> '0 '
BEGIN
RAISERROR ( '该人已经结帐,不能再修改或录入新的记录! ', 16, 1)
ROLLBACK TRANSACTION
END
END
END

====================================================================================

CREATE TRIGGER RegAccList_Del ON RegAccList
FOR DELETE
AS
BEGIN
DECLARE @Curtain char, @ExecFlag char

SELECT @Curtain = Curtain, @ExecFlag = cFlag FROM RegAccount A INNER JOIN deleted D ON

A.dj_id = D.dj_id
IF @Curtain <> '0 ' or @ExecFlag = 'E '
BEGIN
RAISERROR ( '该笔记录已记帐或处于结算状态,不能删除! ', 16, 1)
ROLLBACK TRANSACTION
END
END
====================================================================================


------解决方案--------------------
remark
------解决方案--------------------
最好的方法,带宽弄大点。。。。。。。。。。
不然没办法满足他们的要求