Doctrine 2 인터페이스를 사용하여 MS SQL 데이터베이스에 액세스하고 있다.
Doctrine 2와 MS SQL 양쪽에서 꽤 흥미로운 문제를 발견했다 .
어떤 이유로 질의를 바꾸는 교리 2
$this->getEntityManager()->createQueryBuilder()
->from(table::class, 'il')
->select('CONCAT(il.col1,il.col2,il.col3) AS concated')
-
(자체 별칭을 사용하는) 것과 같은 것으로 변경 :
SELECT (t0_.col1+ t0_.col2+ t0_.col3) AS sclr_0 FROM tableName t0_
-
가장 중요한-그것은 CONCAT
를 변경 '+'로 표현한다.
그러나 연결된 문자열을 다른 테이블의 값과 비교하고 싶을 때까지 정상적으로 작동한다 (또는 작동하는 것처럼 보입니다).
$targetQueryBuilder->getEntityManager()->createQueryBuilder()
->from($namespace, 's')
->select('1')
->where('CONCAT(il1.col1, il1.col2, il1.col3) = s.controlValue')
->andWhere('s.tableName = :tablename')
->andWhere('s.tableRowIdentifier='.$rowIdentifier);
-
(문제가있는 경우 메모리 에서이 쿼리를 작성하고 있습니다-중요하지 않습니다-문제를 시각화하는 것입니다) CONCAT
에서 SQL Studio에서 원시 쿼리를 실행하면 완벽하게 작동한다.
기능. '+'로는 그렇지 않다.
nvarchar 형식의 모든 연결된 열 문제는 : 차이점은 어디에 있습니까?
지도 CONCAT
를 건너 뛰기 위해 교리에서 엄청난 양의 조합을 확인했다 . '+'로 성공했지만 성공하지 못했다 . CONCAT
를 강제하기 위해 더미 렉서 확장을 작성해야했다 . 최종 검색어에 적용 할 함수이다.
추가적인 (아마도 SQL 서버에 따라 다름) 문제는 다음과 같다.
테스트 할 때
SELECT
(i1_.NameUnternehmen + i1_.Land + i1_.Ort + i1_.Straße + i1_.Postleitzahl) AS a,
CONCAT(i1_.NameUnternehmen , i1_.Land , i1_.Ort , i1_.Straße , i1_.Postleitzahl) AS c
FROM tablename
-
( Straße
) 이 문제에서는 열 이름이 중요하지 않은 것 같다.
) WHERE 문을 사용하여 연결된 문자열을 제어 값과 비교할 때 선택 결과가 다릅니다.
->where('CONCAT(il1.col1, il1.col2, il1.col3) = s.controlValue')
-모든게 정확 해
->where('(il1.col1 + il1.col2 + il1.col3) = s.controlValue')
-열 'a'의 결과가 널이다.
방금 테스트했으며 다른 테이블에서는 때로는 null이 아닙니다.
이유를 모르겠습니다.
'c'열은 항상 정확한다.