我通过界面往YHJ_GYH_GB_CODE表里插入数据,我特意A3这个字段没有插进去。
想通过触发器来实现,写了如下脚本:
结果发现同样的数据插进去2条,一个A3带日期的,一个A3不带日期的,
我估计是触发器这里的问题,不知我想的通过前台界面插入A1,A2的同时把A3顺便给插个日期值的想法,是否能通过触发器实现?
--DROP TRIGGER YHJ_GYH_GB_CODE_INSERTCREATE TRIGGER [dbo].YHJ_GYH_GB_CODE_INSERT ON [dbo].YHJ_GYH_GB_CODE
    FOR INSERT
AS
    BEGIN
        INSERT  INTO YHJ_GYH_GB_CODE
                ( A1 ,
                  A2 ,
                  A3
                )
                SELECT  inserted.A1 ,
                        inserted.A2 ,
                        CONVERT(VARCHAR(100), GETDATE(), 21)
                FROM    inserted;


    END

解决方案 »

  1.   

    不用那么麻烦, 加个默认约束就可以了:
    ALTER TABLE YHJ_GYH_GB_CODE ADD CONSTRAINT DF_YHJ_GYH_GB_CODE_A3 DEFAULT GETDATE() FOR A3;
    加约束之后, 你在执行 
    INSERT  INTO YHJ_GYH_GB_CODE ( A1 , A2  ) VALUES( @A1, @A2 )语句时, A3 会自动赋默认值 , 不需要你操心的。
      

  2.   


    -- 楼主,把你的测试结果发上来。--DROP TRIGGER YHJ_GYH_GB_CODE_INSERT
    create table YHJ_GYH_GB_CODE(A1 int, A2 int, A3 varchar(30))
    goCREATE TRIGGER [dbo].YHJ_GYH_GB_CODE_INSERT ON [dbo].YHJ_GYH_GB_CODE
        FOR INSERT
    AS
        BEGIN
            INSERT  INTO YHJ_GYH_GB_CODE
                    ( A1 ,
                      A2 ,
                      A3
                    )
                    SELECT  inserted.A1 ,
                            inserted.A2 ,
                            CONVERT(VARCHAR(100), GETDATE(), 21)
                    FROM    inserted;


        END
    goinsert into YHJ_GYH_GB_CODE(A1,A2) values(11,111)
    go
    insert into YHJ_GYH_GB_CODE(A1,A2,A3) values(22,222,'2011-01-01')
    go
    select * from YHJ_GYH_GB_CODE
    go
    drop table YHJ_GYH_GB_CODE
    go
    A1          A2          A3
    ----------- ----------- ------------------------------
    11          111         NULL
    11          111         2018-12-05 08:22:49.467
    22          222         2011-01-01
    22          222         2018-12-05 08:22:49.473(4 行受影响)
      

  3.   

    你这个如果要用触发器,得用INSTEAD OF,否则就像#2版主那样处理就可以了。
      

  4.   

    学习了。          这个instead of触发器,我自己写写看看。
      

  5.   

    create table YHJ_GYH_GB_CODE(A1 int, A2 int, A3 varchar(30))
    go
     
    CREATE TRIGGER [dbo].YHJ_GYH_GB_CODE_INSERT ON [dbo].YHJ_GYH_GB_CODE
        instead of insert
    AS
        BEGIN
            INSERT  INTO YHJ_GYH_GB_CODE
                    ( A1 ,
                      A2 ,
                      A3
                    )
                    SELECT  inserted.A1 ,
                            inserted.A2 ,
                            CONVERT(VARCHAR(100), GETDATE(), 21)
                    FROM    inserted;
         
         
        END
    go
     
    insert into YHJ_GYH_GB_CODE(A1,A2) values(11,111)
    go
    insert into YHJ_GYH_GB_CODE(A1,A2,A3) values(22,222,'2011-01-01')
    go
    select * from YHJ_GYH_GB_CODE
    go
    drop table YHJ_GYH_GB_CODE
    go
     
    结果是:
    11 111 2018-12-05 20:35:05.110
    22 222 2018-12-05 20:35:05.123