我正在使用MS SQL Server Express 2017。
我有一个OrderDetails表。
OrderDetailID OrderID ProductID Quantity Category
1 1 1 5 Local
2 1 3 2 Remote
3 1 2 5 Store
4 2 1 3 Local
5 2 2 5 Remote
6 2 3 2 Remote
我想使用现有的OrderID列表插入一个新的订单明细,其中包含“不可用”类别。我拥有的OrderID列表位于临时表中,其中OrderID的Int值已经在OrderDetails表中。
例如:如果在我的订单ID的临时表中我有1和2(orderID 1和2),我想在OrderDetails表中插入另一个OrderID 1和OrderID 2我想要的价值观,例如“不可用”的类别。 (Category的列数据类型为varchar(50),但我希望Insert语句使用我临时表中的相同OrderID值和我想要添加的现有OrderID。
我的临时表(_tmpOrderIDs):
OrderID
1
2
到目前为止,我有这样的陈述:
INSERT INTO OrderDetails
(OrderID, ProductID, Quantity, Category)
VALUES ((SELECT OrderID FROM _tmpOrderIDs), 4, 1, 'Unavailable')
我得到的错误是'子查询返回的值超过1。',这是正确的,因为_tmpOrderIDs有多个OrderID。但是我希望_tmpOrderIDs中的所有orderID都可以使用我给它的自定义值插入到OrderDetails表中,同时保持它们各自的OrderID相同,因为它们是 - 在临时表中,_tmpOrderIDs。
有什么想法吗?
答案 0 :(得分:2)
只需使用insert . . . select
:
INSERT INTO OrderDetails (OrderID, ProductID, Quantity, Category)
SELECT OrderID, 4, 1, 'Unavailable'
FROM _tmpOrderIDs;
不需要VALUES
关键字。