从表数据类型声明中查找SQL查询

时间:2014-10-08 04:07:55

标签: sql sql-server tsql

我在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。如何写这种情况的查询?

欢迎所有建议。

3 个答案:

答案 0 :(得分: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)
             );

答案 1 :(得分:0)

CAST/CONVERT(msdn.microsoft.com)您的查询中的var1到NTEXT类型,以便类型兼容。

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

答案 2 :(得分:0)

由于欢迎所有建议。

如何将tblTemp上的数据类型更改为NVARCHAR(MAX)?

NTEXT在2005年引入NVARCHAR(MAX)后被弃用。

ALTER TABLE tblTemp ALTER COLUMN colA NVARCHAR(MAX)