我在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 :(得分: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)