为什么这个SQL脚本可以正常工作?

Ger*_*ton 6 sql t-sql sql-server

我正在从SQL Server 2005中的表中提取电子邮件地址记录,并希望构建一个用作@recipients列表的字符串sp_send_dbmail.该表有一个名为EmailAddress的字段,表中有10条记录.

我这样做:

DECLARE @email VARCHAR(MAX)
SELECT
    @email = ISNULL(@email + '; ', '') + EmailAddress
FROM
    accounts
Run Code Online (Sandbox Code Playgroud)

现在@email有一个半分隔的10个电子邮件地址列表,来自accounts表.

我的问题是为什么/如何运作?为什么@email只有表中的最后一个电子邮件地址?

Joe*_*orn 5

因为对于每一行,您将当前值@email与下一个结果相连接EmailAddress.字符串连接就像调用函数一样,因为它必须按顺序计算每一行的结果.