Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server:IN ('asd') funktioniert nicht, wenn die Spalte NTEXT ist

Ein IN list ist nur eine Abkürzung für ODER-Bedingungen. Das LIKE Klausel funktioniert mit NTEXT und TEXT Felder. Sie können also diese beiden Ideen kombinieren, um dies zu tun:

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

Wie @marc_s jedoch in einem Kommentar zur Frage vorgeschlagen hat, NVARCHAR(MAX) wird bevorzugt, da alle String-Funktionen damit arbeiten (und die TEXT , NTEXT , und IMAGE Datentypen sind seit SQL Server 2005 veraltet). Sie könnten Führen Sie eine Inline-Konvertierung durch, z. B.:

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

aber wahrscheinlich würde das nicht so gut funktionieren wie die Verwendung von LIKE -Klausel mit OR Bedingungen.

Bitte beachten: Beim Arbeiten mit NTEXT / NVARCHAR / NCHAR / XML Daten, am besten immer Stellen Sie Zeichenfolgenliteralen ein großes "N" voran. Andernfalls kann es zu Datenverlusten für alle Zeichen kommen, die nicht von der Codepage unterstützt werden, die der Standardsortierung der Datenbank zugeordnet ist.

Weitere Informationen zum Arbeiten mit Sortierungen / Kodierungen / Unicode / Zeichenfolgen im Allgemeinen in SQL Server finden Sie unter:https://Collations. Info/