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