没有啊,如过那些列不能为空才必须要SET
如果你不想修改某些列(允许为空),可以SET CXXX=NULL

解决方案 »

  1.   

    那是因为你在DW painter中选择属性Update Properties中,将所有可以更新的列都选中了。w你可以在其中只选择你要更新的列。
      

  2.   

    killerdanny(danny) 说的好 咱也是这样过来的,感觉和打魂斗罗,马丽一样,
    多练几次,翻烂点书就挺过来了
      

  3.   

    首先谢了,我想我没把问题说清楚。
    我的dw所有字段都必须是能更新的,只是想在用户只修改了c1字段而未修改其他字段时才执行trigger里的特定操作.我知道dw生成的update语句里where部分的生成方式可设置,但
    set部分没法控制,某字段如c2的修改状态为NotModified!时,set部分还是包括了c2=...,非常讨厌,这样就不能在trigger里判明是否只有c1字段被更新了,因为dw提交给数据库的sql语句的set部分包含了所有字段(尽管用户在dw里只修改了c1字段,但其他字段如c2还是用原值在set部分重设了一遍).
    现在请大家再帮我想一下吧!
      

  4.   

    把key modification 改为use update.
      

  5.   

    你错了,这个问题应该可以在Trigger里解决的。
      

  6.   

    比如:下面是一个asa的trigggerCREATE TRIGGER
    tr_manager BEFORE UPDATE OF dept_head_id ON department
    REFERENCING OLD AS old_dept
    NEW AS new_dept
    FOR EACH ROWBEGINDELCARE @new_id char(10), @old_id char(10)select @new_id = new_dept.dept_head_id
    select @old_id = old_dept.dept_head_idIF @new_id <> @old_id
     UPDATE employee
    SET employee.manager_id=new_dept.dept_head_id
    WHERE employee.dept_id=old_dept.dept_idEND
      

  7.   

     to Sunny21cn(无名)
    怎么解决
      

  8.   

    你这个问题应该在Trigger里解决
    你觉得上面的代码对你没有帮助吗?
      

  9.   

    上面的例子里,假设dept_head_id是你想监控的字段
    new_dept保存已更新的一行的数据
    old_dept保存是更新以前的一行中的数据所以比较new_dept.dept_head_id和old_dept.dept_head_id是否不同,就可以判断该字段是否被修改.
      

  10.   

    to Sunny21cn(无名)
    你的trigger是对的,可我不知在ms sql server 中如何写.
      

  11.   

    这要看你的字段在表里的具体位置,比如是5
    在trigger中这样判断IF COLUMNS_UPDATED( POWER( 2, 5 - 1 ) ) > 0
    BEGIN
      --被修改了。
    END
      

  12.   

    多谢,但update(columnname)和COLUMNS_UPDATED()函数都只是指出update tablename set 
    语句里明确指出了那些列,至于是否与原值相等的判断依靠deleted和inserted系统表不是很好处理,我不知道deleted和inserted系统表中每一行是否是一一对应的.
      

  13.   

    针对Update,PB的数据窗口有两种模式,一种是update,另一种是delete & insert。你可以试试第二种模式。
    我很少用MS Sql Server,所以不能给你一个满意的答复。通过你的问题,我对MS Sql Server的Trigger也了解了一些,所以也谢谢你。
    希望多联系。