CREATE TABLE sales
(id INT PRIMARY KEY IDENTITY, name VARCHAR(30),
percent_part FLOAT, sales FLOAT, sum_bonus DECIMAL);
CREATE TRIGGER TRcointingBonus ON sales
AFTER UPDATE
AS BEGIN
DECLARE @sum_bonus FLOAT;
SELECT @sum_bonus = (SELECT ((sales / 100) * percent_part) FROM sales);
UPDATE sales SET sum_bonus = @sum_bonus
END;
INSERT INTO sales VALUES('staff1', 7.0, 7088, 1);
INSERT INTO sales VALUES('staff2', 3.5, 20590, 1);
INSERT INTO sales VALUES('staff3', 10.5, 6089, 1);
UPDATE sales SET sales = 7088 WHERE id=1;
我创建了一个表和一个触发器,对于每个UPATE操作,sum_bonus的每一行都会有计算。
问题在
DECLARE @sum_bonus FLOAT;
SELECT @sum_bonus = (SELECT ((sales / 100) * percent_part) FROM sales);
如果删除FROM sales
,则写入变量将不可能。能解释原因是什么以及如何在不放弃变量的情况下解决这个问题吗?
您的实际错误非常清楚,您的子查询返回多个值。如果您使用示例数据,并单独运行子查询:
SELECT ((sales / 100) * percent_part)
FROM sales
得到3个值:
(无列名) | 496.16 | 720.65
---|