如何使用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
逻辑说明
- 先通过临时表给每个员工记录生成唯一行号,同时把NULL姓名替换为'N/A',方便后续循环遍历。
- 初始化变量后,用WHILE循环从第1行到最后一行逐行读取姓名,拼接到结果变量中。
- 注意判断结果变量是否为空,避免拼接后的字符串开头出现多余的逗号。
不过要注意,这种循环拼接的方式在数据量较大时,性能会不如你之前用的变量直接累加的方法,因为循环逐行处理会产生更多的数据库IO操作。
内容的提问来源于stack exchange,提问作者man1fest
相关产品推荐
相关产品推荐

