【发布时间】:2009-05-14 08:34:53
【问题描述】:
我有一个填充单个列 (PromoCode) 的 sql 服务器“而不是插入”触发器。这一切都很完美,但我不喜欢我不得不在实际的 INSERT 语句中对列进行硬编码:
CREATE TRIGGER PopulateOrderPromoCode ON Order
INSTEAD OF INSERT
AS BEGIN
--// Get the Promo Code
DECLARE @PromoCode int;
EXEC GetPromoCode @PromoCode OUTPUT;
--// Insert the order with the new Promo Code
INSERT INTO Order (Id, CustomerId, PromoCode)
SELECT Id, CustomerId, @PromoCode FROM inserted;
END
我宁愿简单地将inserted.PromoCode 中的值替换为@PromoCode,然后可以使用:
INSERT INTO Order
SELECT * FROM inserted;
这个可以吗?
【问题讨论】:
-
您确定一次只能插入一行吗?如果任何人(例如,某晚修复表的 DBA)曾经在一个语句中插入多行,则所有插入的行都将被分配相同的 @PromoCode 值。
标签: sql-server triggers