2014-04-01 1 views
4

이것은 내 코드입니다.현재 명령에서 심각한 오류가 발생했습니다. - 알 수없는 오류

;With CTE as 
(
select 
    a.rn, 
    a.LongDescription as ad, 
    b.LongDescription as bd 
from myTabl as a 
    left join myTabl as b on a.rn +1 = b.rn 
where 
    a.rn=1 
and 
    a.LongDescription = 'Eric' 
) 
update CTE 
    set ad += ' ' + b.LongDescription 
from CTE as a 
    left join myTabl as b on a.rn = b.rn+1 
where 
    a.rn=1 

나는 diff를 시도하면서 하나의 질문에 대한 답변을 시도하고있었습니다. 옵션 다음과 같은 오류가 발생했습니다.

Msg 0, Level 11, State 0, Line 0 
A severe error occurred on the current command. The results, if any, should be discarded. 
Msg 0, Level 20, State 0, Line 0 
A severe error occurred on the current command. The results, if any, should be discarded. 

이것은 무엇입니까, 나는 아무것도 얻지 못하고 있습니다. 내 코드에 중대한 실수가 있습니까? Google에 시도했지만 모든 결과가 "Microsoft Fix"로 리디렉션되었습니다. 어떤 사람들은 잘못되었다는 것을 나에게 간단한 설명으로 설명해 줄 수 있습니까?

+0

SQL Server 프로파일 러에서 다음을 시도해 보셨습니까? – Crono

+0

CTE를 합법적으로 업데이트하려고 시도 중입니까? 대신 CTE를 통한 쿼리를 기반으로 실제 테이블을 업데이트해야합니다. 또한 CTE 결과에 'myTabl'을 다시 결합하려고 시도하는 것이 이상하다는 것을 알게되었습니다. – Crono

+0

CTE를 업데이트 할 수 있습니다. 모든 어려움에있는 것은 아니지만 다른 오류가 발생합니다. 뭔가가 기본 테이블을 수정할 수 없다고 생각합니다. –

답변

0

난 당신이 설정 라인을 변경해야 할 것 같아요 :

set ad = a.ad + ' ' + b.LongDescription 

이 이것을 시도하는 SQL 바이올린 데모 here

+0

'+ ='는 INSERT 문에서 유효한 연산자입니다. http://msdn.microsoft.com/en-us//library/ms177523.aspx – qxg

+0

고맙습니다 @qxg. 개인적으로, 나는 그곳의 논리를 이해하기가 때로는 어렵 기 때문에 그것을 좋아하지 않습니다. 'set ad = ad +' '+ b.LongDescription'로 나누면 다른 오류가 표시되어 그 (것)들을 침을 뱉고 그 행에 별칭을 사용하는 것이 좋습니다. – zhongxiao37

0

확인을 .................

;With CTE as 
(
select 
    a.rn, 
    a.LongDescription as ad, 
    b.LongDescription as bd 
from myTabl as a 
    left join myTabl as b on a.rn +1 = b.rn 
where 
    a.rn=1 
and 
    a.LongDescription = 'Eric' 
) 
update CTE 
    set ad += ' ' + b.LongDescription 
from CTE as a 
    left join 
    (select (rn+1) AS NewRN,* from myTabl)as b on a.rn = b.NewRN 
where 
    a.rn=1