Q&A

  • [질문] left outer join...
MS-SQL2000을 사용하고 있고, Delphi 7 로 코딩 중이고,
TADOQuery를 사용하여 ADO로 DB에 접속했습니다.

아래 쿼리를 돌리면...

Query.Close;
Query.SQL.Clear;

Query.SQL.Add( 'Select A.aaa, A.bbb, B.BBB From TABLE_A A ');
Query.SQL.Add('  Left Outer join TABLE_B B on (A.aaa = B.bbb AND B.ccc = :GB) ');
Query.SQL.Add('  Where  A.ddd Like :NM ');
DBSQL.Query.SQL.Add(' Order By A.aaa, A.bbb');

Query.Parameters.ParamByName('NM').Value:= '%'+Trim(ed_name.Text)+'%';
Query.Parameters.ParamByName('GB').Value:='B';

Query.Open;

text, ntext 및 image 데이터 형식은 IS NULL 또는 LIKE 연산자를 함께 사용할 때를 제외하고 비교하거나 정렬할 수 없습니다.

라는 에러가 발생합니다.

위 쿼리에 사용된 칼럼 중에는 text, image 등의 칼럼은 없습니다.
이리저리 하다보니... :GB 변수에 'B' 를 넣는 ParamByName을 빼고
Query.SQL.Add('  Left Outer join TABLE_B B on (A.aaa = B.bbb AND B.ccc = ''B'') ');
이렇게 쿼리에 직접 'B'를 넣으니 문제 없이 쿼리가 돌아갑니다.

left outer join을 사용한 쿼리에서 이런 문제가 발생하는데...
왜 그런지 도저히 모르겠습니다.
답변 부탁드립니다. 감사합니다.
1  COMMENTS
  • Profile
    Crazy™ 2008.07.24 22:52
    사용하신 ADO Query의 Parameters 을 확인해보세요.
    sql안에 쿼리문을 넣으시면 파라미터들이 생성이 되고 datatype 등을 지정할 수 있게 되어있습니다.

    참고로 개인적인 생각이지만 저렇게 파라미터 보다는
    Where A.ddd Like :NM
    이렇게
    Where A.ddd Like ''%'+aaa.text+'%''
    가 좋은거 같아요. 디버깅할때나 쿼리분석기에서 쓸때 편하거든요.