没有啊,如过那些列不能为空才必须要SET
如果你不想修改某些列(允许为空),可以SET CXXX=NULL
如果你不想修改某些列(允许为空),可以SET CXXX=NULL
解决方案 »
- 如何用SSIS 定期向一个表里导数据
- select '中文'的结果问题
- ADO数据库连接问题/////////////////?????????????
- 各位大哥.快快帮忙啊.我UPDATA时忘了加WHERE 结果两万多条记录里的同一字段全被我更新了.
- 怎样把两个数据库的内容导入一个excel表中
- sqlexpress(sql2005版本9.0.3042.0)安装出错,怎么处理
- sql server 2005没有日志文件如何恢复数据库
- SQL Server安全问题
- vb的data控件如何连接access 2000
- delphi5.0+sql server7.0的程序在nt4.0下运行,字段和表名要严格区分大小写吗?
- 如何在SQLSERVER数据库中,生成一个表的备份表?TABLE1,要生成一个TABLE2与TABLE1结构,数据都相同
- InterDev,Dreamwerver,Delphi,SQL Server,Photoshop这些软件正版各值多少钱?
多练几次,翻烂点书就挺过来了
我的dw所有字段都必须是能更新的,只是想在用户只修改了c1字段而未修改其他字段时才执行trigger里的特定操作.我知道dw生成的update语句里where部分的生成方式可设置,但
set部分没法控制,某字段如c2的修改状态为NotModified!时,set部分还是包括了c2=...,非常讨厌,这样就不能在trigger里判明是否只有c1字段被更新了,因为dw提交给数据库的sql语句的set部分包含了所有字段(尽管用户在dw里只修改了c1字段,但其他字段如c2还是用原值在set部分重设了一遍).
现在请大家再帮我想一下吧!
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
怎么解决
你觉得上面的代码对你没有帮助吗?
new_dept保存已更新的一行的数据
old_dept保存是更新以前的一行中的数据所以比较new_dept.dept_head_id和old_dept.dept_head_id是否不同,就可以判断该字段是否被修改.
你的trigger是对的,可我不知在ms sql server 中如何写.
在trigger中这样判断IF COLUMNS_UPDATED( POWER( 2, 5 - 1 ) ) > 0
BEGIN
--被修改了。
END
语句里明确指出了那些列,至于是否与原值相等的判断依靠deleted和inserted系统表不是很好处理,我不知道deleted和inserted系统表中每一行是否是一一对应的.
我很少用MS Sql Server,所以不能给你一个满意的答复。通过你的问题,我对MS Sql Server的Trigger也了解了一些,所以也谢谢你。
希望多联系。