복붙노트

[SQL] 텍스트, ntext 및 화상 데이터> 유형 비교할 수없는 또는 IS NULL 또는 LIKE> 연산자를 사용하는 경우를 제외하고, 정렬

SQL

텍스트, ntext 및 화상 데이터> 유형 비교할 수없는 또는 IS NULL 또는 LIKE> 연산자를 사용하는 경우를 제외하고, 정렬

이메일 테이블 예약에 속하고 우리의 마이크로 소프트 SQL 서버 유형 "텍스트"로 정의

SELECT email, 
 COUNT(email) AS NumOccurrences
FROM Booking
GROUP BY email
HAVING ( COUNT(email) > 1 )

위의 쿼리를 실행 한 후 (예약에서 중복 이메일을 찾기 위해 노력하고) 이 같은 오류 메시지를 받았습니다 :

나는 마이크로 소프트 SQL을 사용하고 있습니다

해결법

  1. ==============================

    1.SQL Server를 사용하고 있기 때문에, 왜 (100) VARCHAR에 데이터 유형을 변경할 수 없습니다?

    SQL Server를 사용하고 있기 때문에, 왜 (100) VARCHAR에 데이터 유형을 변경할 수 없습니다?

    ORDER BY 절 또는 SELECT 문의 GROUP BY 절 중 하나를 사용할 때 데이터 유형을 변경하지 않고이 오류를 해결하려면 TEXT 또는 NTEXT 열 필요는 VARCHAR 또는 NVARCHAR로 변환 할 수 있습니다. 에 alittle 비트 지저분 예를 들어,

    SELECT  CAST(email AS NVARCHAR(100)) email, 
            COUNT(CAST(email AS NVARCHAR(100))) AS NumOccurrences
    FROM    Booking
    GROUP   BY CAST(email AS NVARCHAR(100))
    HAVING  COUNT(CAST(email AS NVARCHAR(100))) > 1 
    
  2. ==============================

    2.때문에 나는 내 ORM에 문제의 허용 대답에 문제가 있었다. 이 답변하는 경우에만 허용 대답은하지 않습니다 작업에 대한 해결 방법, 당신은 당신이 선택의 열을 포함 할 수 있도록이 필요하기 때문에에 의해 그룹의 열이있는 경우에만 유효합니다.

    때문에 나는 내 ORM에 문제의 허용 대답에 문제가 있었다. 이 답변하는 경우에만 허용 대답은하지 않습니다 작업에 대한 해결 방법, 당신은 당신이 선택의 열을 포함 할 수 있도록이 필요하기 때문에에 의해 그룹의 열이있는 경우에만 유효합니다.

    그것에 의해 그룹에 요구되지되도록 집합 함수의 열 내부를 캐스팅하고, 오류가 발생하지 않으며 리턴 된 데이터가 여전히 정확해야한다.

    MIN(CAST(email AS NVARCHAR(4000))) as email
    

    이상적으로이 해킹을 방지 할 수있는 방법을 찾을 것입니다, 그러나 이것은 어떤 상황에서 유용 할 수 있습니다.

  3. from https://stackoverflow.com/questions/14979413/the-text-ntext-and-image-data-types-cannot-be-compared-or-sorted-except-whe by cc-by-sa and MIT license