Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server:IN ('asd') non funziona quando la colonna è NTEXT

Un IN list è solo un'abbreviazione per le condizioni OR. Il LIKE la clausola funziona con NTEXT e TEXT campi. Quindi, puoi combinare queste due idee per farlo:

WHERE (
       someNtext LIKE N'asd'
OR     someNtext LIKE N'asd1'
      )

Tuttavia, come suggerito da @marc_s in un commento alla domanda, NVARCHAR(MAX) è preferito poiché tutte le funzioni di stringa funzionano con esso (e TEXT , NTEXT e IMAGE i tipi di dati sono stati deprecati a partire da SQL Server 2005). Potresti esegui una conversione in linea come:

WHERE CONVERT(NVARCHAR(MAX), someNtext) IN (N'asd', N'asd1')

ma probabilmente non avrebbe le stesse prestazioni dell'utilizzo di LIKE clausola con OR condizioni.

Nota: Quando si lavora con NTEXT / NVARCHAR / NCHAR / XML dati, è meglio sempre prefisso letterali stringa con una "N" maiuscola. In caso contrario, potrebbero verificarsi perdite di dati per tutti i caratteri non supportati dalla codepage associata alle regole di confronto predefinite del database.

Per ulteriori informazioni sull'utilizzo di regole di confronto/codifiche/Unicode/stringhe in generale in SQL Server, visitare:https://Collations. Info/