2014-10-08 77 views
0

我有一些串行鍵在sql數據庫中找到,如「A-B-C」,「D-E-F」,「G-H-I」,「J-K-L」,它們使用ntext數據類型存儲在tblTemp中。以上這些鍵可以存儲在三列colA,colB和colC中(有時存儲在一列中,其餘爲空)。有時,兩個序列鍵可以在一列中找到(例如A-B-C; D-E-F),使用「;」分開。所以我寫了下面的SQL查詢。查詢從表數據類型聲明

Declare @sa TABLE(var1 nvarchar(Max)); 
Insert INTO @sa(var1) VALUES (N’A-B-C’); 
Insert INTO @sa(var1) VALUES (N’D-E-F’); 
Insert INTO @sa(var1) VALUES (N’G-H-I’); 
Insert INTO @sa(var1) VALUES (N’J-K-I’); 

SELECT * FROM tblTemp 
WHERE colA IN (SELECT var1 FROM @sa); 

所以我得到了以下錯誤信息。

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

我仍然需要找到colB和colC。如何爲這種情況編寫查詢?

歡迎您提出任何建議。

回答

0

您必須將您的搜索字詞轉換/轉換爲適當的數據類型,在這種情況下爲text

試試這個:

Declare @sa TABLE(var1 nvarchar(Max)); 
Insert INTO @sa(var1) VALUES (N’A-B-C’); 
Insert INTO @sa(var1) VALUES (N’D-E-F’); 
Insert INTO @sa(var1) VALUES (N’G-H-I’); 
Insert INTO @sa(var1) VALUES (N’J-K-I’); 

SELECT * 
FROM tblTemp t 
WHERE EXISTS (SELECT 1 
       FROM @sa s 
       WHERE t.colA like cast('%'+s.var1+'%' as text) 
       OR t.colB like cast('%'+s.var1+'%' as text) 
       OR t.colC like cast('%'+s.var1+'%' as text) 
      ); 
0

CAST/CONVERT(msdn.microsoft.com)你VAR1到查詢NTEXT類型,這樣的類型兼容。

SELECT 
    * 
FROM 
    tblTemp 
WHERE 
    colA IN (
    SELECT 
     CAST(var1 AS NTEXT) 
    FROM 
     @sa 
); 
0

由於歡迎提供所有建議。

如何將tblTemp上的數據類型更改爲NVARCHAR(MAX)?

NTEXT用在2005年引入的NVARCHAR(MAX)

ALTER TABLE tblTemp ALTER COLUMN可樂NVARCHAR(MAX)

棄用