例如:在一个表tblTest中有三个字段ID、Field1、Field2当我在更新Field1的值时希望Field2的值根据Field1的值变化。比如当Field1的值为2时,希望Field2的值自动加1。触发器我是这样写的:CREATE TRIGGER [trTest] ON [dbo].[tblTest] 
FOR UPDATE
ASDECLARE @nField1 int
DECLARE @nField2 intBEGIN
IF UPDATE(Filed1)
BEGIN
SELECT @nField1 = f2 FROM tblTest
IF @nField1 = 2
BEGIN
SELECT @nField2 = Field2 FROM tblTest
SET @nField2 = @nField2 + 1
UPDATE tblTest SET Field2 = @nField2 
END
END
END但是会将所有行的数据都更新。如何做到只更新当前行,如何定位到当前行呢?或者不使用触发器而使用什么约束,是否能达到预期的目的呢?

解决方案 »

  1.   

    create trigger test_tr on ta
    for update
    as
    if update(Field1)
    update ta
    set Field2=Field2+1
    from 
    inserted i
    where 
    ta.id=i.id and i.Field1=2
      

  2.   

    使用触发器你必须知道两个表 inserted 和 deleted
    你更新的时候实际上sqlserver是先删除旧值然后插入新值
    新值保存在inserted表里面,所以你可以直接去inserted表里面取值你更新的时候想把Field2加1就要去找到这一列对应的id楼上 roy_88(中国风_燃烧你的激情!!!) 的例子就很好了