存储过程 - 具有"select top 1 @arastr = k"的异常 SQL Server 查询


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

这个查询是做什么的,select top 1 @arastr = k的意义是什么?这个查询取自一个已经工作了7-8年的存储过程,所以这个查询没有什么问题,但是我不明白它是怎么做的。

(#m是一个临时表,在查询的前面部分创建)

查询从临时表#mk列中选择一个随机值(因为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))

最新更新