Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何更新VARCHAR列,使其包含由空格分隔的另外两个VARCHAR列的内容?_Sql_Sql Server - Fatal编程技术网

Sql 如何更新VARCHAR列,使其包含由空格分隔的另外两个VARCHAR列的内容?

Sql 如何更新VARCHAR列,使其包含由空格分隔的另外两个VARCHAR列的内容?,sql,sql-server,Sql,Sql Server,我不熟悉SQL,这也许就是为什么我无法找到以下问题的解决方案 我有一个数据库表,其中所有列的类型都是VARCHAR(50): 我想更新FullName中的值,以便它们是FirstName和LastName的组合,用空格分隔 这就是我想要的结局: 我不想手动更新每一行 我不想手动更新每一行 我将向您展示两种解决方案: 用一句话更新专栏。其实这并不麻烦: UPDATE Names SET FullName = FirstName + ' ' + LastName; -- or: … =

我不熟悉SQL,这也许就是为什么我无法找到以下问题的解决方案

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

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

这就是我想要的结局:

我不想手动更新每一行

我不想手动更新每一行

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

  • 用一句话更新
    专栏。
    其实这并不麻烦:

    UPDATE Names
    SET FullName = FirstName + ' ' + LastName;
    -- or:     … = CONCAT(FirstName, ' ', LastName);
    
    您说过您的所有列都定义为
    VARCHAR(50)
    ,因此请注意
    FirstName+'''+LastName
    的最大长度可能达到50+1+50=101个字符。因此,
    FullName
    有可能被截断:该列只存储前50个字符(或更少);如果有更多,它们就会被扔掉。因此,您可能需要将
    FullName
    重新定义为
    VARCHAR(101)

  • 或者,
    全名
    转换为计算列:

    ALTER TABLE Names
    DROP COLUMN FullName;
    
    ALTER TABLE Names
    ADD FullName AS (FirstName + ' ' + LastName);
    
    此解决方案有三个明显的优点:

  • FullName
    永远不能与
    FirstName
    LastName
    相矛盾,因为它是通过指定的表达式从它们自动派生的(在查询时)
  • 与上述解决方案一样,不存在字符串截断的危险。请注意,您不需要为
    FullName
    指定类型;SQL Server会根据表达式自动计算出来
  • FullName
    不会占用任何存储空间(除非它包含在索引中)

  • 你想提供代码示例吗?我从这篇文章中尝试了几乎所有的方法,我不能删除任何列,我必须有一个合并了两个值的列。请告诉我们你的表的定义(特别是它的列的类型)。列的数据类型是navchar(50)。嗯,我认为这会起作用,我只是测试了它,仅此而已“问题”是“全名”列中的名称之间有太多的空格。@emo:Then
    RTRIM(FirstName)
    LTRIM(LastName)
    .MSDN reference pages:,stakx谢谢,它解决了间距问题。谢谢各位。我很想放弃一些投票,但我不能。从现在起,我将始终使用事务,以避免错误。@emo:不客气。一旦你有足够的声誉,请随时返回这里并进行投票。哦,相信我,即使使用tra,你也会犯错误(动作…;-)