2011-05-14 48 views
1

如何解決此問題?SQL Server:當列爲NTEXT時,IN('asd')不起作用

where someNtext IN ('asd',asd1') 

給出了一個錯誤:

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

+2

是缺少龍頭'「'爲'」 asd1 ''參數只是一個錯字? – 2011-05-14 14:44:36

+4

'NTEXT'被稱爲是一個非常難以處理的數據類型 - 我建議切換到'NVARCHAR(MAX)'這是更容易使用和工作! – 2011-05-14 14:47:49

回答

5

一個IN名單只是短手或條件。 LIKE子句適用於NTEXT和TEXT字段。所以,你可以結合這兩種觀念要做到這一點:

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

然而,隨着有關問題的評論@marc_s建議,NVARCHAR(MAX)是優選的,因爲所有的字符串函數與它(和文本工作, NTEXT和IMAGE數據類型已被棄用)。您可以內嵌轉換,如:

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

,但可能不會執行,以及使用LIKE子句與OR條件。

+1

我認爲最好避免使用這種類型,你不覺得嗎? – 2011-05-14 14:59:28

+0

如果您在創建列時有選擇,那麼肯定是避免使用TEXT,NTEXT和IMAGE,因爲它們已被棄用,並且可能會從未來版本的SQL Server中刪除。但是,如果使用在SQL Server 2000中完成的系統,然後升級到更新的版本,並且無法更改列數據類型,那麼使用LIKE子句就可以。理想情況下,您將有機會使用NVARCHAR(MAX)數據類型重建表,但有時人們會從第三方開發人員的包中工作,無法進行更改。 – 2011-05-14 15:03:28

-1

NTEXT是沒有可比性的,你擰,如果你需要比較使用爲nvarchar(MAX)

+1

請刪除這個答案,因爲它是特別錯誤的。使用LIKE子句可以比較NTEXT字段。 – 2011-05-14 15:04:23

0

http://msdn.microsoft.com/en-us/library/ms187993.aspx不使用它:

ntext, text, and image data types will be removed in a future version of Microsoft SQL Server. Avoid using these data types in new development work, and plan to modify applications that currently use them. Use nvarchar(max), varchar(max), and varbinary(max) instead.