ALTER TRIGGER OrderCheck ON Material_Prove
INSTEAD OF UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF UPDATE(COMMENT2) OR UPDATE(COMMON)
BEGIN
DECLARE @item VARCHAR(10),@COMMON_New VARCHAR(MAX),@COMMON_Old VARCHAR(MAX)
SELECT @item = ITEM FROM inserted
SELECT @COMMON_New = ISNULL(CAST(COMMON AS VARCHAR(MAX)),'')+ISNULL(CAST(COMMENT2 AS VARCHAR(MAX)),'')
FROM inserted
SELECT @COMMON_Old = ISNULL(CAST(COMMON AS VARCHAR(MAX)),'')+ISNULL(CAST(COMMENT2 AS VARCHAR(MAX)),'')
FROM deleted
IF @COMMON_New <> @COMMON_Old
BEGIN
IF EXISTS(
SELECT ITEM FROM CORDER_DTL
WHERE C_LINE_STAT IN (2,3,4) AND ITEM = @item
UNION ALL
SELECT ITEM FROM PORDER_DTL
WHERE P_LINE_STAT IN (2,3,4) AND ITEM = @item
UNION ALL
SELECT ITEM FROM MORDER_DTL
WHERE M_LINE_STAT IN (2,3,4) AND ITEM = @item
)
BEGIN
SELECT '存在未完成订单,不能修改!'
ROLLBACK TRAN
END
END
END
END
代码如上,为什么我在不满足IF条件是执行UPdate 根本不会更改数据库!
如下:(此段代码执行显示一行发生变化,可是数据根本不变!)
UPDATE MATERIAL_PROVE
SET POUND = 3,requ_id_1 = 1
WHERE ITEM = '000001'
------解决思路----------------------
INSTEAD OF 触发器只是先建立临时的inserted和deleted ,至于是update资料还是insert还是delete都要在触发器里面实现.
IF UPDATE (COL)
BEGIN
DO somthing
END
ELSE
BEGIN
UPDATE T
SET COL1 = I.COL1,
COL2 = I.COL2..........
FROM TB T,
INSERTED I
WHERE T.ID = I.ID
END
另外,你这种情况用after触发器没办法实现吗?