文本列上的SQL内部联接

文本列上的SQL内部联接,sql,text,inner-join,Sql,Text,Inner Join,我有两个表(设备和软件),我想在上面进行内部连接。它们都有一个名为EQCN的字段。它是一个文本字段。我得到以下错误: “等于”运算符中的数据类型text和text不兼容 必须有办法解决这个问题。在文本字段上进行连接将非常缓慢,即使它确实有效。或许可以使用: CONVERT(varchar, myColumnName) = 'my value' 将这些列的数据类型更改为varchar(max) : 在将来的版本中,将删除ntext、text和image数据类型 微软的SQL Server。避免在

我有两个表(设备和软件),我想在上面进行
内部连接。它们都有一个名为EQCN的字段。它是一个文本字段。我得到以下错误:

“等于”运算符中的数据类型text和text不兼容


必须有办法解决这个问题。

在文本字段上进行连接将非常缓慢,即使它确实有效。或许可以使用:

CONVERT(varchar, myColumnName) = 'my value'

将这些列的数据类型更改为
varchar(max)

:

在将来的版本中,将删除ntext、text和image数据类型 微软的SQL Server。避免在新文档中使用这些数据类型 开发工作,并计划修改当前使用的应用程序 他们。改用nvarchar(max)、varchar(max)和varbinary(max)


虽然这很奇怪,但微软建议使用类似子字符串的方式对文本或ntext进行间接比较。例如:

SELECT * 
FROM t1 
JOIN t2 ON SUBSTRING(t1.textcolumn, 1, 20) = SUBSTRING(t2.textcolumn, 1, 20)
这当然会引发一系列其他问题,比如,如果第一个字符相同怎么办,等等。如果可以的话,我建议先改变类型,而不是接受这个建议


这些列中最长的条目长度是多少?@Oded-实际上不需要。如果您尝试连接两列,并且两列都是
文本
数据类型,则会出现此错误。@MartinSmith-很公平。我从未尝试加入
文本
专栏:)@Oded-No,看起来确实不寻常。我怀疑它可能不需要是
text
/
varchar(max)
。一想到有人试图加入text或varchar(max)的行列,我就感到毛骨悚然。这些数据类型不应在联接中使用。这会将其截断为
30
个字符,并更改语义。