У меня есть следующий триггер:
CREATE TRIGGER trFoodUpdate ON Food
AFTER UPDATE
AS
DECLARE @Action nvarchar(1000) = 'Change(s): '
IF Inserted.FoodID <> Deleted.FoodID THEN SET @Action += CHAR(13) + '-You have updated FoodID from ' + Inserted.FoodID + 'to ' + Deleted.FoodID
.... --Other IF-s--
INSERT INTO FoodTriggerTable (FoodID, FoodName, FoodDesc, FoodPrice, Action, InsertActionTime)
SELECT FoodID, FoodName, FoodDesc, FoodPrice, @Action, GETDATE() FROM Inserted
GO
Я пытаюсь вставить обновленные FoodID
, FoodName
и т. Д. В мой FoodTriggerTable
. Тем не менее, я не могу сделать:
IF Inserted.FoodID <> Deleted.FoodID THEN ...
В нем говорится, что «идентификатор из нескольких частей« Inserted.FoodID »не может быть связан». Такая же ошибка возникает на Deleted.FoodID
. Почему это так?
Я подумал, что мог бы использовать DECLARE
для объявления временных переменных, которые могут хранить все необходимые данные из указанных таблиц, но могу ли я использовать описанный выше подход?
EDIT
Кажется, я неправильно понял многие понятия в SQL Server, но я пытаюсь вставить обновленные FoodID
, FoodName
и остальные поля в таблицу с именем FoodTriggerTable
, в которой хранятся «журналы», которые содержит информацию об обновлении записи.
Я пытаюсь вставить предложение, в котором перечислены изменения, внесенные в запись в моей таблице Food
внутри моего FoodTriggerTable
. Таким образом, я попытался установить новую переменную с именем @Action
для хранения строки, которую я затем объединю с другими строками. Строка, содержащаяся в @Action
, будет вставлена в поле Action
в FoodTriggerTable
, используя:
INSERT INTO FoodTriggerTable (FoodID, FoodName, FoodDesc, FoodPrice, Action, InsertActionTime)
SELECT FoodID, FoodName, FoodDesc, FoodPrice, @Action, GETDATE() FROM Inserted
Предположим, я обновил только цену еды в таблице Food
, я хотел бы, чтобы мое поле Action
в FoodTriggerTable
содержало следующую строку:
Change(s): You've changed the food price from 30 to 45
Итак, что я пытаюсь сделать, это объединить 'You've changed the food price from' + previous food price + 'to' + after update food price
.