2 つのテーブルがあります。1 つは製品を含み、もう 1 つは注文情報を含みます。
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