【发布时间】:2014-05-05 02:18:26
【问题描述】:
我有以下架构(更复杂的版本):
CREATE TABLE Messages (
ItemId INT IDENTITY PRIMARY KEY,
Name VARCHAR(20) NOT NULL,
DeliveryType INT NOT NULL
);
CREATE TABLE NotificationsQueue (
ItemId INT NOT NULL,
DeliveryType INT NOT NULL
);
DeliveryType 的可能值为:
0 -> none
1 -> mail
2 -> email
3 -> both
现在,Messages 表中有一些条目:
INSERT INTO Messages(Name, DeliveryType) Values
('Test0', 0),
('Test1', 1),
('Test2', 2),
('Test3', 3)
我需要像这样填充 NotificationsQueue 表:
- 当 DeliveryType = 0 时,不要插入任何东西
- 当 DeliveryType = 1 OR DeliveryType = 2 时,插入一个元组:(ItemId, DeliveryType)
- 当 DeliveryType = 3 时,插入两个元组:(ItemId, 1), (ItemId, 2)
我这样做的尝试导致了以下两个查询:
INSERT INTO NotificationsQueue (ItemId, DeliveryType) SELECT ItemId, 1 AS DeliveryType FROM Messages WHERE DeliveryType IN (1, 3)
INSERT INTO NotificationsQueue (ItemId, DeliveryType) SELECT ItemId, 2 AS DeliveryType FROM Messages WHERE DeliveryType IN (2, 3)
尽管这样可行,但插入的选择语句在实践中要复杂得多,所以我想知道是否有任何好的方法可以将它们合并到一个查询中,以避免重复。
PS:我不允许在Messages 表中更改架构或添加重复项。
【问题讨论】:
-
当然,但我仍然需要从其他表中选择内容,因为
Messages不包含我需要放入NotificationsQueue的所有信息。即使在触发器内部,我如何才能使用单个INSERT语句? -
那么,你能不能在变量中收集信息,然后插入值?
-
嗯,好吧,想想看,如果我使用带有 IF 语句的触发器,那可能还不错。感谢您的提示! :)
标签: sql sql-server select insert bulkinsert