sql >> Database >  >> RDS >> Sqlserver

SQL Server:IN ('asd') werkt niet als de kolom NTEXT is

Een IN lijst is slechts een afkorting voor OK-condities. De LIKE clausule werkt met NTEXT en TEXT velden. Je kunt deze twee ideeën dus combineren om dit te doen:

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

Echter, zoals @marc_s suggereerde in een opmerking over de vraag, NVARCHAR(MAX) heeft de voorkeur omdat alle tekenreeksfuncties ermee werken (en de TEXT , NTEXT , en IMAGE datatypes zijn afgeschaft vanaf SQL Server 2005). Je zou doe een inline conversie zoals:

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

maar waarschijnlijk zou dat niet zo goed presteren als het gebruik van de LIKE clausule met OR voorwaarden.

Let op: Bij het werken met NTEXT / NVARCHAR / NCHAR / XML gegevens, kunt u het beste altijd prefix tekenreeksletters met een hoofdletter "N". Als u dit niet doet, kan dit leiden tot gegevensverlies voor tekens die niet worden ondersteund door de codetabel die is gekoppeld aan de standaardsortering van de database.

Ga voor meer informatie over het werken met sorteringen / coderingen / Unicode / tekenreeksen in het algemeen in SQL Server naar:https://Collations. Info/



  1. Hibernate + Oracle IN-clausulebeperking, hoe dit op te lossen?

  2. Wijzigingen opslaan na tabelbewerking in SQL Server Management Studio

  3. Upgraden van SQL Server 2000 naar 2005 of 2008 - DTS naar SSIS

  4. Parametersnuiven (of spoofen) in SQL Server