2013-02-20 5 views
19

e-mail appartiene alla prenotazione del tavolo e la sua definita come tipo "testo" nel nostro sql server MicrosoftIl testo, ntext e dati di immagine> tipi non possono essere confrontati o ordinati, tranne quando si utilizza IS NULL o COME> operatore

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

dopo aver eseguito la query di cui sopra (cercando di trovare i duplicati e-mail in seguito alla prenotazione) ho ricevuto il messaggio di errore simile a questo:

il testo, ntext e dati di immagine tipi non può essere paragonata o ordinati, ad eccezione quando si utilizza l'operatore IS NULL o LIKE .

Sto usando Microsoft Sql

+2

Perché si usa 'Text' per le email? _ "i tipi di dati ntext, text e image verranno rimossi in una versione futura di Microsoft SQL Server. Evita di utilizzare questi tipi di dati" _ http://msdn.microsoft.com/en-us/library/ms187993.aspx ** Non puoi raggruppare per 'text' **: _" Colonne di tipo text, ntext e image non possono essere utilizzate in group_by_expression "_ http://msdn.microsoft.com/en-us/library/ms177673.aspx –

+0

Quale versione di SQL Server stai usando? –

+0

@TimSchmelter grazie ma è vecchio e in produzione, improbabile che lo cambiamo –

risposta

41

dal momento che si sta utilizzando SQL Server, perché non cambiare il tipo di dati a VARCHAR(100)?

Per risolvere questo errore senza cambiare il tipo di dati, la colonna TEXT or NTEXT ha bisogno di essere convertito in VARCHAR or NVARCHAR quando viene utilizzato in entrambi la clausola ORDER BY o la clausola GROUP BY di un'istruzione SELECT. ad esempio, che è po 'tantino disordinata

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 
Problemi correlati