我正在针对订单标题表 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;