You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用WHILE循环将Employees表姓名在一行打印(不使用函数)

使用WHILE循环实现Employees表姓名拼接成单行

完全可行,你可以通过临时表配合行号,再用WHILE循环逐行读取姓名并拼接成单行字符串,具体实现代码如下:

-- 声明所需变量
DECLARE @AllNames VARCHAR(1000) = ''
DECLARE @CurrentName VARCHAR(100)
DECLARE @RowNum INT = 1
DECLARE @TotalRows INT

-- 创建临时表,给每条员工记录加上行号,同时处理NULL姓名为'N/A'
SELECT 
    ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowNumber,
    ISNULL(Name, 'N/A') AS EmployeeName
INTO #TempEmpNames
FROM Employees

-- 获取员工总条数
SELECT @TotalRows = COUNT(*) FROM #TempEmpNames

-- WHILE循环逐行拼接姓名
WHILE @RowNum <= @TotalRows
BEGIN
    -- 获取当前行的员工姓名
    SELECT @CurrentName = EmployeeName FROM #TempEmpNames WHERE RowNumber = @RowNum
    
    -- 处理首条记录,避免开头出现多余逗号
    IF @AllNames = ''
        SET @AllNames = @CurrentName
    ELSE
        SET @AllNames = @AllNames + ',' + @CurrentName
    
    -- 行号自增,处理下一条记录
    SET @RowNum = @RowNum + 1
END

-- 输出拼接后的结果
SELECT @AllNames AS 所有员工姓名

-- 清理临时表
DROP TABLE #TempEmpNames

逻辑说明

  1. 先通过临时表给每个员工记录生成唯一行号,同时把NULL姓名替换为'N/A',方便后续循环遍历。
  2. 初始化变量后,用WHILE循环从第1行到最后一行逐行读取姓名,拼接到结果变量中。
  3. 注意判断结果变量是否为空,避免拼接后的字符串开头出现多余的逗号。

不过要注意,这种循环拼接的方式在数据量较大时,性能会不如你之前用的变量直接累加的方法,因为循环逐行处理会产生更多的数据库IO操作。

内容的提问来源于stack exchange,提问作者man1fest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 03:52:10