我们有两个表:一个包含产品,另一个包含订单信息。
CREATE TABLE [dbo].[ORDERS]
(
[ROW] [BIGINT] IDENTITY(1, 1) NOT NULL,
[ID] [UNIQUEIDENTIFIER] NOT NULL,
[RETAILER_ID] [UNIQUEIDENTIFIER] NOT NULL,
[INDIVIDUAL_ID] [UNIQUEIDENTIFIER] NOT NULL,
[PRODUCT_ID] [UNIQUEIDENTIFIER] NOT NULL,
[QUANTITY] [BIGINT] NOT NULL,
[DATE] [DATETIME] NOT NULL,
[MEMO] [NVARCHAR](MAX) NULL
)
ON [PRIMARY]
TEXTIMAGE_ON [PRIMARY]
CREATE TABLE [dbo].[PRODUCTS]
(
[ROW] [BIGINT] IDENTITY(1, 1) NOT NULL,
[ID] [UNIQUEIDENTIFIER] NOT NULL,
[RETAILER_ID] [UNIQUEIDENTIFIER] NOT NULL,
[NAME] [NVARCHAR](255) NOT NULL
)
ON [PRIMARY]
我们需要修复此触发器,以便当产品名称更改时,订单表中的备注字段需要在订单表中对更改进行备注。所以这是我们设计的触发器,但我们收到错误“无法绑定多部分标识符“o.Memo”。”
这是产生错误的触发器?我们哪里出了问题?
CREATE TRIGGER DBO.PRODUCTS_NAME_CHG
ON DBO.PRODUCTS
AFTER UPDATE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
DECLARE @old NVARCHAR(255),
@new NVARCHAR(255),
@ID UNIQUEIDENTIFIER
SELECT @ID = ID,
@old = NAME
FROM DELETED
SELECT @NEW = NAME
FROM INSERTED
SET NOCOUNT ON;
IF UPDATE (NAME)
BEGIN
UPDATE DBO.ORDERS
SET o.MEMO = o.MEMO + ' ' + @OLD + ' HAS CHANGED NAME TO ' + @NEW
+ '. '
FROM ORDERS o
INNER JOIN PRODUCTS P
ON P.ID = O.PRODUCT_ID
WHERE P.ID = @ID
END
END
GO