2009-09-26 119 views
0

我想執行這個查詢:SQL服務器插入查詢問題

INSERT INTO [Order] (FactorId, ProductId, Entity) 
VALUES((SELECT Top 1 FactorId FROM Factor WHERE UserId = @UserId AND Status = -1), @ProductId, @Entity) 

但出現以下錯誤:

子查詢在此背景下 允許。只有標量表達式允許使用 。

回答

4

嘗試

INSERT INTO [Order] (FactorId, ProductId, Entity) 
SELECT Top 1 FactorId, @ProductId, @Entity FROM Factor WHERE UserId = @UserId AND Status = -1 
0
INSERT INTO [Order] (FactorId, ProductId, Entity) 
SELECT (select Top 1 FactorId FROM Factor WHERE UserId = @UserId AND Status = -1), 
@ProductId, @Entity 
+0

我執行此查詢,但發生以下錯誤: INSERT語句的選擇列表包含幾個呃項目比插入列表。 SELECT值的數量必須與INSERT列的數量相匹配。 – 2009-09-26 14:42:23

0

嘗試用這種

INSERT INTO [Order] (FactorId, ProductId, Entity) 
(SELECT Top 1 FactorId, @ProductId, @Entity FROM Factor 
WHERE UserId = @UserId AND Status = -1) 

注:插入帶有select查詢不會允許VALUES關鍵字:)。

0

,如果你有參與其他列,避免TOP 1統一,並考慮這樣的事情...

INSERT INTO [Order] (FactorId, ProductId, Entity) 
SELECT FactorId, @ProductId, @Entity FROM Factor 
WHERE UserId = @UserId 
    AND Status = -1 
    and timestamp = (select max(timestamp) from Factor where UserId = @UserId AND Status = -1) 

,如果你有一個排序順序這個概念也適用列或任何其他唯一列

+0

還有其他更好的答案。當max(時間戳)不唯一時,這會更復雜並且有插入倍數的風險 – RichardTheKiwi 2012-09-29 11:59:19