文本列上的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
个字符,并更改语义。