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을 사용한 쿼리에서 이런 문제가 발생하는데...
왜 그런지 도저히 모르겠습니다.
답변 부탁드립니다. 감사합니다.
sql안에 쿼리문을 넣으시면 파라미터들이 생성이 되고 datatype 등을 지정할 수 있게 되어있습니다.
참고로 개인적인 생각이지만 저렇게 파라미터 보다는
Where A.ddd Like :NM
이렇게
Where A.ddd Like ''%'+aaa.text+'%''
가 좋은거 같아요. 디버깅할때나 쿼리분석기에서 쓸때 편하거든요.