Je commence simplement avec les déclencheurs SQL Server et j'ai des problèmes avec ce problème :
Faites un déclencheur à faire : une fois qu'un progiciel est installé sur un PC, l'installateur n'a plus qu'à fournir les données pour pack, tagnum et instdate. La colonne softcost doit être modifiée en fonction du packcost du package.
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
J'obtiens l'erreur suivante :
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
Je pense que quelque chose ne va pas avec mon instruction d'insertion, comme mentionné dans ce blog, car le déclencheur semble s'exécuter avec succès. C'est ce que je suis censé faire ?
Gratitude