如何更新VARCHAR列,使其包含两个其他VARCHAR列的内容,以空格分隔?

时间:2014-10-11 08:34:04

标签: sql sql-server

我是SQL新手,这也许是我无法找到解决以下问题的原因。

我有这个数据库表,所有列的类型都是VARCHAR(50)

f

我想更新FullName中的值,以便它们是FirstNameLastName的组合,以空格分隔。

这就是我想要的结果:

f

我不想手动更新每一行。

1 个答案:

答案 0 :(得分:1)

  

我不想手动更新每一行。

我将向您展示两种解决方案:

  1. UPDATE列中包含一条语句。这真的不是那么麻烦:

    UPDATE Names
    SET FullName = FirstName + ' ' + LastName;
    -- or:     … = CONCAT(FirstName, ' ', LastName);
    

    您说您的所有列都定义为VARCHAR(50),因此请注意FirstName + ' ' + LastName最长可达50 + 1 + 50 = 101个字符。因此,FullName可能会被截断:该列只存储前50个字符(或更少);如果还有更多,他们会被扔掉。因此,您可能希望将FullName重新定义为VARCHAR(101)

  2. 或者,FullName转换为计算列:

    ALTER TABLE Names
    DROP COLUMN FullName;
    
    ALTER TABLE Names
    ADD FullName AS (FirstName + ' ' + LastName);
    

    此解决方案有三个明显的优势:

    1. FullName永远不会与FirstNameLastName发生冲突,因为它是通过指定的表达式自动派生出来的(在查询时)。
    2. 与上述解决方案一样,没有字符串截断的危险。请注意,您无需为FullName指定类型; SQL Server根据表达式自动计算出来。
    3. FullName不会占用任何存储空间(除非它包含在索引中)。