2010-08-22 80 views
42

如果我使用類似將NTEXT列與常數值進行比較的正確方法是什麼?

[ntext2] <> '1,032.5', 

我得到這個錯誤:

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

如果比較在任何列類型相同的方式來實現最好的可能的解決方案。 (<>運算符適用於NVARCHAR和INT)。

+0

其轉換爲NVARCHAR(MAX)和所有字符串函數將提供給你... NTEXT是凌亂的,它的過時 - 擺脫它! – 2010-08-23 06:18:28

+2

如果有人要求M $將其CRM數據庫的NTEXT轉換爲NVARCHAR,我將在請願書上簽名;) – noober 2010-08-23 08:21:46

回答

48

ntext數據類型已棄用,因此適用nvarchar(max)數據類型。如果您可以更改表格中的數據類型,那將是最佳解決方案。然後將其與varchar文字相比沒有問題。

否則,你將有比較之前投的價值:

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

你也可以考慮使用一個nvarchar的文字,解決了一些類似的數據類型的問題:

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

不幸的是,這不是一種選擇,因爲MS自己使用ntext,儘管它宣稱它在同一時間被棄用。我會嘗試N前綴和鑄造,謝謝你的答案。 – noober 2010-08-22 22:11:30

8

,如果您更喜歡不投,你可以在某些情況下使用LIKEPATINDEX,正如本MSDN主題所示:http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/6bd4c661-ea0b-435f-af78-097e61549d41

沒有通配符的LIKE表達式(在這種情況下)大致等價於測試的相等性。

在這種情況下,表達的是:

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

LIKE要求DB正確索引(AFAIK)。我想避免這種要求。 – noober 2010-08-23 08:25:23

+0

@ noober:LIKE子句不會從索引中獲益太多,除非它們不包含前導通配符。演職人員可能會忽視現有的索引。如果您關注性能,那麼在性能測試中選擇每個選項(cast,like,patindex)以及使用索引和不使用索引都是最符合您的興趣的。如果我今天得到片刻,我會檢查一下。 – kbrimington 2010-08-23 11:26:39

+0

不,我剛剛在不同的數據庫上測試了與NTEXT的LIKE,並且失敗了其中一個。只是不能執行。問題與索引有關。所以我不能確定LIKE能在任何地方工作。 – noober 2010-08-23 13:34:49

相關問題