Я просто получаю мои ноги мокрые с триггеров в SQL Server, и я борюсь с этой проблемой:Trigger в SQL Server: производный столбец на INSERT
Создать триггер, чтобы сделать: всякий раз, когда установлен пакет программного обеспечения на ПК персоналу, который устанавливает программное обеспечение, требуется только предоставить данные для пакета, tagnum и instdate. Столбец softcost необходимо обновить на основе пакета пакета.
CREATE TRIGGER software_on_install_fill_in
ON software
FOR INSERT, UPDATE
AS
--declare the names and types of variables you will use
DECLARE @software_pack char(4), @software_tagnum char(5),
@software_datetime datetime, @software_softcost numeric(10,2)
BEGIN
--set the variables to values
SET @software_pack = (SELECT software.PACK FROM software, inserted i)
SET @software_tagnum = (SELECT software.TAGNUM FROM software, inserted i)
SET @software_datetime = (SELECT software.INSTDATE FROM software, inserted i)
UPDATE software
--apply logic to auto update softcost column of inserted row
SET @software_softcost = (SELECT package.PACKCOST
FROM package, inserted i
WHERE SOFTCOST = @software_softcost)
END
GO
-- Try a test case, which fails
insert software(PACK, TAGNUM, INSTDATE)
values('ac11', '32494', '9/14/1998 0:00:01')
GO
--Try to see if contents of the table have changed, also fails
select * from software
Я получаю следующее сообщение об ошибке:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
я думаю, что что-то не так с моим вставным заявлением, потому что сам триггер, кажется, выполнить должным образом. Правильно ли я это делаю?
Thanks
вы не можете вымышленным есть только одна запись в 'inserted' или' deleted' таблицы. Эти две таблицы содержат записи, на которые влияют инструкции 'INSERT' или' UPDATE' или 'DELETE'. Вам нужно будет перезаписать триггер, чтобы обработать то, что «вставленный» – Squirrel
может содержать несколько строк, поэтому вы не можете назначить его переменной. – ydoow
«Я думаю, что что-то не так с моей инструкцией вставки ...» Инструкция вставки в порядке. Триггер выглядит ужасно. Вы получаете свою ошибку в каждой строке после '--set переменные до значений' –