2011-08-31 5 views
0

심각한 문제입니다 : 그것은 SQL 쿼리 분석기에서 잘못입니까?VS-2005에서 모호한 Sql 오류

는 내가 SQL 쿼리 분석기에서 다음 쿼리를 테스트 한 얼굴 이상한 상황이 : 그것은 SQL 쿼리 분석기에서 매우 잘 오류 작동하지

insert into PLCommonTotal(CmnTotal) 
select 
case 
when p.NetpurTot > s.NetsalTot then 
(
select NetpurTot from PLPurchaseTotal 
) 
else 
(
Select NetsalTot from PLSaleTotal 
) 
end 
from PLPurchaseTotal p 
join PLSaleTotal s 
on p.companyID=s.companyID 

select * from PLCommonTotal 

.

지금 VS 2005에서 동일한 쿼리를 보면 :

string tot5 = " insert into PLCommonTotal(CmnTotal)" + 
       " select" + 
       " case" + 
       " when p.NetpurTot > s.NetsalTot then" + 
       " (" + 
       " select NetpurTot from PLPurchaseTotal" + 
       ")" + 
       " else" + 
       " (" + 
       " Select NetsalTot from PLSaleTotal" + 
       ")" + 
       " end" + 
       " from PLPurchaseTotal p" + 
       " join PLSaleTotal s" + 
       " on p.companyID=s.companyID"; 
      SqlCommand comcmd = new SqlCommand(tot5, con); 
      comcmd.Transaction = trans; 
      comcmd.ExecuteNonQuery(); 

이 SQL 오류를 던져 : "하위 쿼리 반환 더 하나 개의 값보다. 하위 쿼리가 =! = < < => = =이거나 하위 쿼리에서식이 사용 된 경우에는 하위 쿼리가 허용되지 않습니다. 이 성명서는 기명되었다. "

SQL 쿼리 분석기에서 오류없이 실행되는 이유는 허용되지 않는 질문입니다.

SQL 팀에 결함이 있습니까?

답변

2

PLPurchaseTotal 또는 PLSaleTotal에 둘 이상의 행이있는 경우 쿼리를 작성했습니다. 나는 당신이 SSMS와 VS-2005에서 같은 DB를 사용하지 않는다고 생각한다.

반면에 나는 이것이 당신이 목표로하는 쿼리라고 생각합니다.

insert into PLCommonTotal(CmnTotal) 
select 
    case 
    when p.NetpurTot > s.NetsalTot 
    then p.NetpurTot 
    else s.NetsalTot 
    end 
from PLPurchaseTotal p 
    join PLSaleTotal s 
    on p.companyID=s.companyID 
+0

예 나중에 사용했지만 내 질문이 아닙니다. 귀하의 진술에 따라 SQL Server 2005를 VS-2005에서 문제가 될 수있는 것보다 SQL Server 2005를 사용하는 경우 – mahesh

+0

... transact SQL에 대해 SQL Server 2000 및 SQL 2005와 다른 메커니즘이 있다고 말했습니까? – mahesh

+0

@mahesh - 아니요 DB 버전간에 차이점이 없습니다. 그것은 테이블에 포함 된 데이터의 문제이므로 다른 내용의 다른 데이터베이스를 사용한다고 생각합니다. 테이블에 행 수가 두 개 미만인 경우 원래 쿼리에 오류가 표시되지 않습니다. 하위 쿼리에서 테이블 이름을 지정할 때 기본 쿼리의 from 절에 지정한 테이블이 아닌 전체 테이블 *을 다시 사용합니다 *. –