不正常的SQL Server查询"选择前1 @arastr = k"

时间:2015-07-10 00:20:33

标签: sql-server stored-procedures

select  top 1 @arastr = k
from    #m
where   datalength(k) = (select max(datalength(k)) from #m)

此查询的作用是什么,以及select top 1 @arastr = k的重点是什么?此查询来自已经工作了7 - 8年的存储过程,因此查询没有任何问题,但我无法理解它的作用。

#m是在查询的早期部分创建的临时表。)

3 个答案:

答案 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))