触发器的代码如下
CREATE TRIGGER [TRIGGER_order] ON [dbo].[OdrMaster] 
for INSERT
ASbegin
declare @id varchar
select @id= [OperName] from Inserted  OperName
INSERT INTO [AoxinExchange]([OrderID])VALUES( @id)
end当OdrMaster表执行insert操作时,将插入OdrMaster的字段OperName同步插入AoxinExchange表中。OdrMaster表插入后检测AoxinExchange表,发现的确新增加啦一条记录,但是OrderID字段是空的。这说明OperName字段的值没有取得。通过跟踪,OdrMaster插入时的语句如下。
INSERT INTO OdrMaster ( PsnCode, OdrBill, VendCode, OperName, StartDate, EndDate, CancelDate, JY_Mode, PayDays ) VALUES ( '010', '01009082900005', '001', '史罗明', '2009-8-29 0:0:0.000', '2009-8-31 0:0:0.000', '2009-9-4 0:0:0.000', 1, 0 )   把for 换为after 也不行我实在是找不出问题出在哪里,请各位大侠帮我诊断一下吧。谢谢!

解决方案 »

  1.   

    CREATE TRIGGER [TRIGGER_order] ON [dbo].[OdrMaster] 
    for INSERT 
    AS 
    begin 
    INSERT INTO [AoxinExchange]([OrderID]) SELECT [OperName] from Inserted 
    end 直接这样就可以啦
      

  2.   

    感谢楼上,的确不加value就可以啦。
    不过不明白,为什么触发器里面不能通过select @id= [OperName] from Inserted  OperName 
    取得Inserted  呢?
      

  3.   

    那也应该是:
    select *,id into b from a where .....
      

  4.   

    --應該可以吧
    begin 
    declare @id varchar 
    select @id= [OperName] from Inserted  --OperName  
    INSERT INTO [AoxinExchange]([OrderID])VALUES( @id) 
    end 
      

  5.   

    select @id= [OperName] from Inserted  OperName 
    没加条件呀!
      

  6.   

    --應該可以吧
    --忘記長度了
    begin 
    declare @id varchar(100) 
    select @id= [OperName] from Inserted  --OperName  
    INSERT INTO [AoxinExchange]([OrderID])VALUES( @id) 
    end 
      

  7.   

    alter  TRIGGER [TRIGGER_order] ON [dbo].[OdrMaster]
    for INSERT
    ASbegin
    declare @id varchar(500) --varchar不带参数长度是1
    select @id= [OperName] from Inserted  OperName
    INSERT INTO [AoxinExchange]([OrderID])VALUES( @id)
    end 经测试可以 
      

  8.   

    原因是这样的,如果inserted有多条记录(这是由于一次插入多条记录,每次插入只出发一次触发器,全部插入记录都放在inserted表)
    declare @id varchar 
    select @id= [OperName] from Inserted  OperName 
    只能取到最后一条数据的[OperName],

    INSERT INTO [AoxinExchange]([OrderID])VALUES( @id) 
    也就只能操作最后一条数据,对其他数据,就像触发器没起到作用这是触发器最常见的错误之一。
      

  9.   


    INSERT INTO [AoxinExchange]([OrderID]) SELECT [OperName] from Inserted 
    --最好这样子写,如果批量插入时你用变量取一条就不对了