数据库表结构如下:
select * from TF_POS_Z 
得到以下数据:
OS_ID      OS_NO             ITM      SCDH      SDDH               SSJZ
PO GFPO1010430 1 NULL Y10-1563      YM050#680(D2467)
PO GFPO1010430 2 NULL Y10-1480      YM050#808(D3101)
PO GFPO1010430 3 NULL Y10-1613      YM050#870(D3036)
 
现在要在TF_POS_Z表上面建立一个触发器,实现空值列SCDH=SDDH+' '+SSJZ , 以下为我自己写的触发器,但是有问题ALTER    TRIGGER UP_SCDH  ON  TF_POS_Z AFTER INSERT
AS 
declare @scdh varchar(50)
declare @os_no varchar(30)
declare @os_id varchar(5)
declare @ssjz varchar(50)
declare @sddh varchar(50)
select  @os_id=b.os_id, @os_no=b.os_no,@scdh=a.scdh, @ssjz=b.ssjz, @sddh=b.sddh  from tf_pos_z a, inserted b where a.os_no=b.os_no and a.os_id='PO' 
if  (ISNULL(@ssjz,'')<>'' and  ISNULL(@scdh,'')=''  and isnull(@os_id,'')='PO')
begin
UPDATE A   SET A.SCDH=B.SDDH+' '+B.SSJZ 
FROM TF_POS_Z A, INSERTED B
 WHERE A.OS_NO=B.OS_NO AND A. OS_ID='PO'  AND A.SCDH IS NULL OR A.SCDH=''
end请教各位高手帮忙,修改

解决方案 »

  1.   

    前面那堆东西是废的ALTER TRIGGER UP_SCDH ON TF_POS_Z AFTER INSERT
    AS 
    begin
    UPDATE A SET A.SCDH=B.SDDH+' '+B.SSJZ 
    FROM TF_POS_Z A, INSERTED B
     WHERE A.OS_NO=B.OS_NO AND A. OS_ID='PO' AND A.SCDH IS NULL OR A.SCDH=''
    end
      

  2.   

    ALTER TRIGGER UP_SCDH ON TF_POS_Z AFTER INSERT
    AS  
    begin
    UPDATE A SET A.SCDH=B.SDDH+' '+B.SSJZ  
    FROM TF_POS_Z A, INSERTED B
    WHERE A.OS_NO=B.OS_NO AND a.os_id='PO' and b.OS_ID is null AND A.SCDH IS NULL and b.ssjz is null --在这里加上你的条件即可。
    end
      

  3.   

    WHERE A.OS_NO=B.OS_NO AND a.os_id='PO' and b.OS_ID is null AND A.SCDH IS NULL and b.ssjz is null --在这里加上你的条件即可。具体的条件写好即可.
      

  4.   

    ALTER TRIGGER UP_SCDH ON TF_POS_Z for AFTER INSERT
    AS 
    begin
    UPDATE A SET A.SCDH=B.SDDH+' '+B.SSJZ 
    FROM TF_POS_Z A, INSERTED B
     WHERE A.OS_NO=B.OS_NO AND A. OS_ID='PO' AND A.SCDH IS NULL OR A.SCDH=''
    end--呵呵,插入表TF_POS_Z后,又更改TF_POS_Z的值,怕死锁吗?
      

  5.   

    以上所建的触发器不是为了防止死锁, 而是在采购单中,因为ERP自动转单不能带出生产单号(SCDH),所以建立了这个触发器, 目的是实现ERP自动转单时可以:生产单号(SCDH)=受订单号(SDDH)+''+所属机种(SSJZ),如果TF_POS_Z表中 SDDH,SSJZ不为空,但SCDH为空, 就生产单号(SCDH)=受订单号(SDDH)+''+所属机种(SSJZ).
        同时,如果手工插入TF_POS_Z表中数据时也可以增加, TF_POS_Z表是自定义采购单表。请教各位!!