2009-09-26 113 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