create trigger tr_insert on 表
for insert
as
update 表 set 性别='男'
where 性别=1

解决方案 »

  1.   

    我的这个目的 在Oracle里能够方便地在Before Insert类的触发器里用修改:new记录的方法轻松实现可如何在SQLServer里做同样的功能呢?
      

  2.   

    create trigger tr_insert on 表
    for insert
    as
    update 表 set 性别='男'
     from 表 a,inserted b 
    where a.唯一标识=b.唯一标识
      

  3.   

    未定主键或者没有具有唯一约束的列,这样的操作几乎不可能
    对于那个转换可以用查询来解决
    select 性别=case when 性别=1 then '男' else '女' end from [tablename]
      

  4.   

    感谢大家了
    说白了,我举的这个例子 问题并不是很难解决,其实我只是想知道如何在未定义唯一性列的表的Insert触发器里 修改 刚刚插入的数据的方法
      

  5.   

    zjcxc(邹建) ( ) 信誉:355  2004-08-09 21:56:00  得分: 0  
     你的表中根本没有主键,所以无法定位当前操作影响的记录
    =============================这位五星级超级大侠士都发话 无法定位 了,看来是真的没办法了。
    谢谢各位了。唉,发现了,SQL的功能比起Oracle来 的确是差得太远啊!
      

  6.   

    楼上的说的话太让人伤心了吧。oracle也感觉到了sqlserver的竞争力,也放下那高高的架子了。
    oracle有个rowid的概念,这个在sqlserver中也是很容易实现的,加一个不用自己去管理的自增列也容易,并且比oracle在行更直观,oracle的高级并不体现在这儿。我觉得不接触企业级数据库的应用,是不能感觉oracle的强大的。
    还有一个,ms也认可,oracle的存储过程比sqlserver的功能要强大的多
      

  7.   

    真是不好意思,伤了楼上大哥的心了我也是随便说说而已,我也知道,论方便性,SQL是更优一些的。
    我没怎么用过SQLServer,好多东西都是现学的。我也不是很精通Oracle,仅凭我的感觉也说明不了什么。但我真的是感觉写存储过程或触发器时,SqlServer不及Oracle方便啊,呵呵还有一个感觉:SQLServer的语法,更像VBasic的语法;而Oracle的语法则有点像Java
    不知道这个感觉对不对啊
      

  8.   

    这个问题的正确解法(相必漏主高人看得懂,不必解释了):create trigger tr_insert on 表
    instead of insert
    as
    insert 表 (...,性别,...)
    select ...,case when 性别='1' then '男' ... end,...
    from insertedgo
      

  9.   

    tx1icenhe(冒牌马可 V0.2)试过了,可行!谢!!
      

  10.   

    tx1icenhe(冒牌马可 V0.2) ( ) 信誉:100  2004-08-09 22:20:00  得分: 0  
    用惯一个,再用这个的思路去用第二个,那什么样的第二个都是不如第一个。
    -----------------------------你的话我明白,呵呵,比较有道理……
    :)