SQL自定义函数如何循环7次遍历行生成全名并命名新列?
问题分析与解决
核心问题
你的自定义函数存在两个关键错误:
- 函数定义了
@firstName和@lastName参数,但内部完全未使用,反而直接查询整个stray_kids表赋值给变量。SQL Server中,SELECT @变量 = ... FROM 表的写法会让变量被最后一行的结果覆盖,因此无论调用时传入哪一行的参数,函数都会返回表中最后一行的拼接值。 - 你试图用循环遍历行的思路完全错误,标量值函数是针对每一行单独计算的,不需要手动实现循环逻辑。
修正后的函数写法
直接使用传入的参数进行拼接即可,无需查询整个表:
CREATE FUNCTION dbo.fullName( @firstName VARCHAR(10), @lastName VARCHAR(10)) RETURNS VARCHAR(20) AS BEGIN RETURN CONCAT(@firstName, ' ', @lastName); END
给生成的新列命名
在调用函数的SELECT语句中,使用AS关键字指定列名:
SELECT lastName, firstName, dbo.fullName(firstName, lastName) AS full_name FROM stray_kids
更简洁的替代方案
单纯的列拼接完全不需要自定义函数,直接在查询中使用CONCAT函数即可,效率更高:
SELECT lastName, firstName, CONCAT(firstName, ' ', lastName) AS full_name FROM stray_kids
内容的提问来源于stack exchange,提问作者ckcp
相关产品推荐
相关产品推荐

