2010-08-22 19 views
42

Ben bu hatayı alıyorumBir NTEXT sütununu sabit bir değerle karşılaştırmanın doğru yolu nedir?

[ntext2] <> '1,032.5', 

gibi bir şey kullanıyorsanız:

The data types ntext and varchar are incompatible in the not equal to operator.

karşılaştırma herhangi bir sütun türü için aynı şekilde uygulanması halinde mümkün olan en iyi çözüm olacaktır. (<> operatörü, NVARCHAR ve INT için geçerlidir).

+0

size sunulacak NVARCHAR (MAX) ve tüm dize fonksiyonlarına dönüştürmek ... NTEXT o önerilmemektedir, dağınık - ondan kurtulmak ! –

+2

Herhangi biri, CRM DB'nin NTEXT'lerini NVARCHAR'lara dönüştürmek için M $ isterse, dilekçeyi imzalayacağım;) – noober

cevap

48

ntext veri türü, nvarchar(max) veri türü lehine önerilmemektedir. Tablodaki veri tipini değiştirebilirseniz, bu en iyi çözüm olacaktır. Daha sonra onu varchar literal ile karşılaştırarak hiçbir sorun yoktur.

Aksi takdirde karşılaştırarak önce değer dağıtmak zorunda kalacak:

cast([ntext2] as nvarchar(max)) <> '1,032.5' 
Ayrıca bazı benzer veri türü problemlerini çözer değişmez bir nvarchar, kullanmayı düşünebilirsiniz

:

cast([ntext2] as nvarchar(max)) <> N'1,032.5' 
+1

MS, ntext'i kendi başına kullandığı için bir seçenek değil, aynı zamanda kullanımdan vazgeçtiğini ilan etmesine rağmen. N önekini ve dökümünü deneyeceğim, cevabınız için teşekkürler. – noober

8

Okursanız Bu MSDN ipucunda gösterildiği gibi LIKE veya PATINDEX kullanarak bazı senaryolarda alabilirsiniz: http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/6bd4c661-ea0b-435f-af78-097e61549d41

Jokakartlar olmadan LIKE ifadesi (bu durumda) kabaca eşitlik testine eşdeğer olacaktır.

Bu durumda

, ifadesi olacaktır:

[ntext2] NOT LIKE '1,032.5' 
+0

LIKE, DB'nin düzgün şekilde dizine eklenmesini gerektirir (AFAIK). Bu şartlardan kaçınmak istiyorum. – noober

+0

@noober: LIKE cümleleri, önde gelen joker karakterleri içermediği durumlar dışında, dizinlerden çok yararlanmaz. Bir oyuncu muhtemelen mevcut bir endeksi göz ardı eder. Performans hakkında endişeleriniz varsa, indeksli ve endekssiz her bir opsiyonu (cast, like, patindex) performans testi için en iyi şekilde değerlendirirsiniz. Bugün bir an olsun, kontrol edeceğim. – kbrimington

+0

Hayır, sadece farklı DB'lerdeki NTEXT'lerle LIKE'ı test ettim ve bunlardan biriyle başarısız oldu. Sadece idam edilemedi. Sorun, endekslerle ilgili bir şeydi. Bu yüzden LIKE’nın her yerde çalışacağından emin olamıyorum. – noober

İlgili konular