2009-09-26 8 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 컬럼의 수와 일치해야합니다. –

0

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

참고하여보십시오 못해 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 (timestamp)가 고유하지 않은 경우 배수를 삽입 할 위험이 있습니다. – RichardTheKiwi