如何使此代码循环 7 次并转到下一行?

How do I make this code loop 7 times and go to the next row?

提问人:ckcp 提问时间:4/17/2023 最后编辑:Jonasckcp 更新时间:5/10/2023 访问量:94

问:

我一直在自己学习SQL,我被这个难住了。

在我正在处理的这个表中,我有一个人的名字和姓氏作为一列,我正在使用一个用户定义的函数来连接这两个列以获得他们的全名。

我所拥有的适用于一列,但我不知道如何循环它。这是我的代码。

CREATE FUNCTION dbo.fullName(
    @firstName VARCHAR(10),
    @lastName VARCHAR(10))
RETURNS VARCHAR(20)
AS 
BEGIN
    DECLARE @fullName VARCHAR(20)
    SELECT @fullName = CONCAT(firstName, ' ', lastName) FROM stray_kids
    RETURN @fullName;   
END

然后当我使用 SELECT lastName, firstName,dbo.fullName(firstName, lastName) FROM stray_kids 调用它时 它出现了我添加的图像,这对第一行来说很棒,然后我尝试添加一个 while 循环和计数器等,但无法弄清楚。另外,我将如何命名新列名称?

如果你能帮忙,谢谢!<3 我的输出

sql sql-server while-loop

评论

0赞 Yeras_QazaQ 4/17/2023
对不起,我不完全理解您要做什么,但请尝试使用循环继续用于循环条件 - techonthenet.com/sql_server/loops/continue.php
0赞 ckcp 4/17/2023
也许这可能会有所帮助,我有 8 行数据,由名字和姓氏组成。我正在尝试将两者结合在一起,并且使用我上面列出的代码,它确实完全按照我的要求进行操作。问题是,我不知道如何进入表中的下一行来连接下一组名字和姓氏。桌子上总共有 8 行。
1赞 KrishnakumarS 4/17/2023
我想你正在尝试学习 SQL。只是为了连接名称,您不需要在函数中引用表名。传递给函数的参数就足够了。删除函数中的表名,如下所示。 这将为您提供正确的输出。您也可以使用如下所示的语句来获取结果。.希望这会有所帮助SELECT @fullName = CONCAT(@firstName, ' ', @lastName) /*FROM stray_kids*/SELECT lastName, firstName,CONCAT(firstName, ' ', lastName) FROM stray_kids
0赞 Squirrel 4/17/2023
我想你正在寻找string_agg
0赞 ckcp 4/17/2023
我很感激你的帮助,我对实际连接这两个名字没有问题,我正在尝试教自己如何创建一个函数,它在技术上正在做我需要它做的事情,我只是不确定我将如何让它做列表中的下一个人,而不是在整个列表中给我相同的全名。

答:

2赞 Stu 4/17/2023 #1

使用计算列可以轻松实现您所追求的功能

alter table stray_kids
add FullName as CONCAT(firstName, ' ', lastName);

然后你可以简单地

select FullName from stray_kids;

较新版本的 SQL Server 还支持concat_ws(' ', FirstName, LastName);

如果你真的想使用一个函数,你所需要的只是

CREATE FUNCTION dbo.fullName(
    @firstName VARCHAR(10),
    @lastName VARCHAR(10))
RETURNS VARCHAR(21)
AS 
BEGIN
  RETURN CONCAT(@firstName, ' ', @lastName);   
END

请注意,返回类型需要考虑额外的空格字符...10 个字符似乎很短,所以也许使用varchar(50)

评论

0赞 ckcp 4/18/2023
非常感谢!我想让它成为一个函数,这样我就可以理解如何使函数更多一点。你是最好的!