CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

dw的update语句set部分为何总用所有字段?

楼主probeman()2001-09-22 20:48:10 在 MS-SQL Server / 基础类 提问

我的dw连着一个带update型trigger的表,这个trigger只在有且只有c1字段被更新时作相应处理,可我发现dw不管是否只有c1字段被更新,产生的set部分总是包括了所有字段  
  即set   c1=,c2=,c3=   ...,这该如何是好? 问题点数:40、回复次数:17Top

1 楼powerbu(变)回复于 2001-09-22 20:59:21 得分 0

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

2 楼NetColorWolf(NCW)回复于 2001-09-22 21:08:42 得分 0

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

3 楼killerdanny(堕落的瓦拉斯塔兹)回复于 2001-09-22 21:11:17 得分 0

自己多操作几次就明白了.  
  有的时候,掌握一门工具有一个很好的方法.就是一个名人的名字呀-------------->胡适!Top

4 楼rabbitsfoot(大哥)回复于 2001-09-22 23:36:59 得分 0

NetColorWolf(NCW)说的对Top

5 楼popolop(pb老流氓)回复于 2001-09-22 23:59:20 得分 0

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

6 楼probeman()回复于 2001-09-23 14:59:14 得分 0

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

7 楼susu_0807(苏苏)回复于 2001-09-23 15:49:09 得分 0

把key   modification   改为use   update.Top

8 楼Sunny21cn(毛头)回复于 2001-09-23 15:52:03 得分 0

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

9 楼Sunny21cn(毛头)回复于 2001-09-23 15:59:34 得分 0

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

10 楼probeman()回复于 2001-09-23 16:00:48 得分 0

  to   Sunny21cn(无名)  
  怎么解决Top

11 楼Sunny21cn(毛头)回复于 2001-09-23 16:16:39 得分 0

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

12 楼Sunny21cn(毛头)回复于 2001-09-23 16:21:03 得分 0

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

13 楼probeman()回复于 2001-09-23 16:22:48 得分 0

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

14 楼Sunny21cn(毛头)回复于 2001-09-23 16:41:45 得分 0

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

15 楼probeman()回复于 2001-09-23 19:57:55 得分 0

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

16 楼Sunny21cn(毛头)回复于 2001-09-25 18:54:43 得分 40

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

17 楼probeman()回复于 2001-09-28 11:39:03 得分 0

看来只能先这样了。Top

相关问题

  • ntext类型的字段如何编写sql语句执行update
  • update语句中如何使日期型字段为空
  • sybase12.5->update语句简单问题,快来领分:更新varchar(60)字段的语句这样,写对吗??
  • 一个SQL语句的字段问题
  • 求php更新datetime字段的语句
  • 需php更新clob字段的语句
  • 请教设置字段的SQL语句
  • 更改字段顺序 SQL 语句
  • 如何追加字段,求sql语句?
  • 求sql语句A表1字段=B表1字段+B表2字段??

关键词

  • 字段
  • 语句
  • 修改
  • 数据
  • 解决
  • sql
  • dept
  • dw
  • trigger
  • 更新

得分解答快速导航

  • 帖主:probeman
  • Sunny21cn

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo