插入触发器失败后。为什么?

时间:2021-07-26 13:40:23

标签: text triggers insert add

我正在针对订单标题表 OEORDH 编写插入后触发器,该触发器需要根据表 ARCUSO 中的一系列其他可选客户值添加到注释字段。我做错了什么?

CREATE TRIGGER [dbo].[tr_OEORDH_AfterInsertUpdate]
ON  [dbo].[OEORDH] 
AFTER INSERT AS 
BEGIN  
    
    SET NOCOUNT ON;
    
    DECLARE @Comment AS CHAR(250);
    DECLARE @OrdUniq as dec(9);
    DECLARE @ShipComplete as CHAR(1);
    DECLARE @FreeDepewFreight as CHAR(1);
    DECLARE @CPIFreeOver2500 as CHAR(1);
    DECLARE @CancelBackOrders as CHAR(1);
    DECLARE @PaymentThenInvoice as CHAR(1);
    DECLARE @HoldLabelForPayment as CHAR(1);
    DECLARE @FreightProgram as CHAR(1);
    DECLARE @CustComment as CHAR(60);
    DECLARE @CustomerID AS CHAR(12);
    

/* 从插入的新订单标题行中检索关键数据值 */

    SELECT 
        @Comment = COMMENT, 
        @OrdUniq = ORDUNIQ, 
        @CustomerID=CUSTOMER 
    FROM 
        inserted;
    

/* 从客户可选表中检索 19SHIPCMPLT 标志 */

    SELECT @ShipComplete = CS.VALUE 
    FROM dbo.ARCUSO CS 
    WHERE CS.IDCUST = @CustomerID AND OPTFIELD = '19SHIPCMPLT' ;
    

/* 如果 ShipComplete Flag = TRUE,将带有 CRLF 的文本添加到 COMMENT */

    IF (@ShipComplete = 'Y') 
        SET  @Comment = 'SHIP COMPLETE ' + CHAR(13)+CHAR(10) + @Comment;
    

/* 从客户可选表中检索 20FREEDEPEW 标志 */

    SELECT @FreeDepewFreight = CS.VALUE 
    FROM dbo.ARCUSO CS 
    WHERE CS.IDCUST = @CustomerID AND OPTFIELD = '20FREEDEPEW' ;
    

/* If Free Frt to Depew, NY = TRUE, 将带有 CRLF 的文本添加到 COMMENT */

        IF (@FreeDepewFreight = 'Y') 
           SET  @Comment = 'Free freight to Depew, NY ' + CHAR(13)+CHAR(10) + @Comment;
    

/* 从客户可选表中检索 21CPIFREIGHT 标志 */

    SELECT @CPIFreeOver2500 = CS.VALUE
    FROM dbo.ARCUSO CS 
    WHERE CS.IDCUST = @CustomerID AND OPTFIELD = '21CPIFREIGHT' ;
    

/* 如果 CPIFreeOver2500 Flag = TRUE,将带有 CRLF 的文本添加到 COMMENT */

    IF (@CPIFreeOver2500 = 'Y') 
        SET @Comment = 'Free freight over $2,500 ' + CHAR(13)+CHAR(10) + @Comment;
    

/* 从客户可选表中检索 22CANCELBO 标志 */

    SELECT @CancelBackOrders = CS.VALUE
    FROM dbo.ARCUSO CS 
    WHERE CS.IDCUST = @CustomerID AND OPTFIELD = '22CANCELBO' ;
    

/* 如果 CancelBackOrders Flag = TRUE,将带有 CRLF 的文本添加到 COMMENT */

    IF (@CancelBackOrders = 'Y') 
        SET  @Comment = 'CANCEL B/O Items after shipping ' + CHAR(13)+CHAR(10) + @Comment;
    

/* 从客户可选表中检索 23PAY2INVC 标志 */

    SELECT @PaymentThenInvoice = CS.VALUE
    FROM dbo.ARCUSO CS 
    WHERE CS.IDCUST = @CustomerID AND OPTFIELD = '23PAY2INVC' ;
    

/* 如果 PaymentThenInvoice Flag = TRUE,将带有 CRLF 的文本添加到 COMMENT */

    IF (@PaymentThenInvoice = 'Y') 
        SET  @Comment = 'No Invoice until Paymt Rcvd ' + CHAR(13)+CHAR(10) + @Comment;
    

/* 从客户可选表中检索 24PAY2SHIP 标志 */

    SELECT @HoldLabelForPayment = CS.VALUE
    FROM dbo.ARCUSO CS 
    WHERE CS.IDCUST = @CustomerID AND OPTFIELD = '24PAY2SHIP' ;
    

/* 如果 HoldLabelForPayment Flag = TRUE,将带有 CRLF 的文本添加到 COMMENT */

    IF (@HoldLabelForPayment = 'Y') 
        SET  @Comment = 'Release Label after PYMT Rcvd ' + CHAR(13)+CHAR(10) + @Comment;
    

/* 从客户可选表中检索 25FRTPGM 标志 */

    SELECT @FreightProgram = CS.VALUE
    FROM dbo.ARCUSO CS 
    WHERE CS.IDCUST = @CustomerID AND OPTFIELD = '25FRTPGM' ;
    

/* 如果货运程序标志 = TRUE,将带有 CRLF 的文本添加到 COMMENT */

    IF (@FreightProgram = 'Y') 
        SET  @Comment = 'FREIGHT PROGRAM CUSTOMER ' + CHAR(13)+CHAR(10) + @Comment;
    

/* 从客户可选表中检索 26CSTCOMM 标志 */

    SELECT @CustComment = CS.VALUE
    FROM dbo.ARCUSO CS 
    WHERE CS.IDCUST = @CustomerID AND OPTFIELD = '26CSTCOMM' ;
    

/* 如果自定义客户评论不为空,则在 COMMENT 中添加带有 CRLF 的文本 */

    IF (@CustComment <> '') 
        SET  @Comment = @CustComment + CHAR(13)+CHAR(10) + @Comment;
    

/* 更新订单标题表 */

    UPDATE dbo.OEORDH
    SET COMMENT = @Comment
    WHERE ORDUNIQ = @OrdUniq;
END;

0 个答案:

没有答案