2011-09-08 3 views
0

나는 다음과 같은 SQL 쿼리가 있습니다사용하여 변수에 삽입

Declare @Total_SysDown as int, 
     @Login_SysDown as int 



Set @Total_SysDown = (SELECT SCHED_SYS_DOWN FROM AGT_SC AS S) 
Set @Login_SysDown = (SELECT SYS_DOWN FROM AGT_AC AS A) 


Insert Into dbo.DATA(DATE,ID,LNAME,FNAME,Total_SysDown,Login_SysDown) 
Select C.DATE,C.ID,E.Last_Name,E.First_Name,@Total_SysDown @Login_SysDown 
From dbo.AGT as C Inner Join dbo.EMP as E ON C.ID = E.ID 
Group by C.ID,C.DATE,E.Last_Name,E.First_Name 

이 아니면 그냥 Select 문에 변수 나에게 하위 쿼리의 오류를 제공 1 개 값보다 반환합니다. 내가 이해하는 바로는, 이것은 한 번에 하나의 레코드를 삽입해야한다는 것을 의미하지만이 작업을 수행하는 방법이 확실하지 않습니다. 내가 넣어야하는 while 문이 있습니까, 아니면 실제로 변수가 실제로 처음부터 저를 방해하고 있습니까? 쿼리의

+0

AGT_SC 및 AGT_AC의 값은 AGT 또는 EMP와 관련이 있습니까? 신분증 번호 –

답변

4

적어도 하나는 스칼라 변수에 할당 할 수 있도록, 1 행보다

(SELECT SCHED_SYS_DOWN FROM AGT_SC AS S) 
(SELECT SYS_DOWN FROM AGT_AC AS A) 

돌아보다.

임시 해결책으로 SELECT TOP 1을 사용하여 각 쿼리가 최대 하나의 행을 반환하도록 할 수 있습니다.

+1

+1이 있습니까? @ a1ex07에 동의하십시오. 그렇게하면 SELECT TOP 1 ....이 (가) 결코 실패하지는 않을 것이지만 그게 당신의 의도인지는 모르겠다. – Icarus

+0

좋아요,하지만 둘 이상의 행을 삽입하려는 경우 선택 항목이 점차적으로 테이블 행을 아래로 내려 가기 위해 무엇을해야합니까? – Jessica

+1

'table' 타입의 변수를 선언하거나 (임시 테이블 생성), INSERT INTO ... SELECT를 사용할 수 있습니다. 테이블 변수를 작성하지 않고 파생 된 쿼리를 사용할 수도 있습니다. 마지막으로, 커서를 사용할 수 있습니다 (대개 나쁜 선택이지만 때로는 피할 수없는). – a1ex07

1

INSERT 문에 문제가 있다고 생각하지 않습니다.

문제는 SET 문에 있습니다. SELECT SCHED_SYS_DOWN FROM AGT_SC AS S 문 또는 다른 문이 둘 이상의 값을 반환합니다.

SET을 사용할 때 하나의 값을 변수에 할당합니다. SELECT가 여러 값을 반환합니다. 한 행만 반환하도록 쿼리를 변경하십시오.

1

귀하의 하위 쿼리가 하나 개 이상의 레코드를 반환하기 때문에이 오류가 발생하고 있습니다 : 중 하나를 사용하여

Set @Total_SysDown = (SELECT SCHED_SYS_DOWN FROM AGT_SC AS S) 
Set @Login_SysDown = (SELECT SYS_DOWN FROM AGT_AC AS A) 

당신은 하나의 레코드 만 쿼리에서 반환되어 있는지 확인해야합니다, 여기에 변수를 사용하기를 WHERE 절, TOP 1 또는 다른 것. 귀하의 예제에 의해 확실하게 말할 수는 없지만 SELECT 쿼리에이 테이블을 결합해야하는 것처럼 들립니다.

SELECT ... 
FROM dbo.AGT agt 
    INNER JOIN AGT_SC sc 
     ON sc.<joining column> = <joining table>.<joining column> 
    INNER JOIN AGT_AC ac 
     ON ac.<joining column> = <joining table>.<joining column> 
+0

가입을 시도했지만 동일한 오류가 발생합니다. Top 1을 사용하면 쿼리가 작동합니다 (모든 행에 대해 동일한 변수 데이터가 있음). where 절을 삽입하는 방법을 알아 내려고 노력할 것입니다. – Jessica

+1

그 테이블에서 무엇을 얻으려고합니까? AGT.ID와 일치하는 단일 값입니까? –

+0

꽤 많이 있습니다. 변수의 날짜, ID, 이름 및 해당 에이전트의 값을 원합니다. 내 소스 테이블의 모든 행에 대해이 작업을 수행해야합니다. – Jessica

관련 문제