select top 1 @arastr = k
from #m
where datalength(k) = (select max(datalength(k)) from #m)
这个查询是做什么的,select top 1 @arastr = k
的意义是什么?这个查询取自一个已经工作了7-8年的存储过程,所以这个查询没有什么问题,但是我不明白它是怎么做的。
(#m
是一个临时表,在查询的前面部分创建)
查询从临时表#m
的k
列中选择一个随机值(因为top
没有使用order by
子句),并将其分配给变量@arastr
(先前已经声明)。选择的字符串将是任何匹配表中最长(以字节为单位(通过datallength函数))的字符串。
这是一种非常常见(但有点过时)的方法,可以将k的值放入(先前声明的!)变量@arastr中,以供以后使用。
函数DATALENGTH将测量例如VARCHAR的长度。
对于TOP 1,您在任何情况下都只能得到一个结果行,即具有"最长"k的行,它的值在@arastr之后…
编辑:正如@jpw指出的,如果有超过一个相同(最长)长度的k,这将是随机的。
在不知道#m是什么样子以及'k'是什么类型的数据的情况下,我不能告诉你更多。
看起来更有意义
SET @arastr = (SELECT TOP 1 k
FROM #m
WHERE DATALENGTH(k) = (SELECT MAX(DATALENGTH(k)) FROM #m))