0
这个查询工作,并返回260行:SQL子查询返回多个值,没有更新它工作正常
SELECT PRODUCTS.ProductResalePrice * ((100 - isnull((select discountperc from CUSTOMERDISCOUNT where CustomerID = CUSTOMERS.CustomerID and CategoryID = products.CategoryID), 0))/100) AS incDisc
FROM PRODUCTS
INNER JOIN SHIPMENTPRODUCTS op ON PRODUCTS.ProductID = op.ProductID
INNER JOIN SHIPMENTS ON op.shipmentid = shipments.shipmentid
INNER JOIN CUSTOMERS ON shipments.CustomerID = CUSTOMERS.CustomerID
left JOIN CUSTOMERDISCOUNT ON CUSTOMERS.CustomerID = CUSTOMERDISCOUNT.CustomerID
AND PRODUCTS.CategoryID = CUSTOMERDISCOUNT.CategoryID
WHERE op.shipmentid = 1234
这也是260行:
select * from SHIPMENTPRODUCTS where shipmentid = 1234
但下一个给:
Msg 512,Level 16,State 1,Line 2 子查询返回的值超过1个。当子查询遵循=,!=,<,< =,>,> =或当子查询用作表达式时,这是不允许的。
update SHIPMENTPRODUCTS set SoldFor =
(SELECT PRODUCTS.ProductResalePrice * ((100 - isnull((select discountperc from CUSTOMERDISCOUNT where CustomerID = CUSTOMERS.CustomerID and CategoryID = products.CategoryID), 0))/100) AS incDisc
FROM PRODUCTS
INNER JOIN SHIPMENTPRODUCTS op ON PRODUCTS.ProductID = op.ProductID
INNER JOIN SHIPMENTS ON op.shipmentid = shipments.shipmentid
INNER JOIN CUSTOMERS ON shipments.CustomerID = CUSTOMERS.CustomerID
left JOIN CUSTOMERDISCOUNT ON CUSTOMERS.CustomerID = CUSTOMERDISCOUNT.CustomerID
AND PRODUCTS.CategoryID = CUSTOMERDISCOUNT.CategoryID
WHERE op.ProductID = SHIPMENTPRODUCTS.productid and op.shipmentid = SHIPMENTPRODUCTS.shipmentid)
where SHIPMENTPRODUCTS.shipmentid = @shipmentId
,我认真没有任何线索。也不知道如何开始这个。区别仅在于查询1是独立的,查询2是包装在更新语句中的查询1。
查询1返回多于一个行,所以更新无法完成。你想添加260行到SHIPMENTPRODUCTS表中? – CiucaS 2014-10-22 10:53:10
在内部查询中添加op.ShipmentId = @shipmentId也是。 – Roopesh 2014-10-22 11:05:01