我是SQL新手,这也许是我无法找到解决以下问题的原因。
我有这个数据库表,所有列的类型都是VARCHAR(50)
:
我想更新FullName
中的值,以便它们是FirstName
和LastName
的组合,以空格分隔。
这就是我想要的结果:
我不想手动更新每一行。
答案 0 :(得分: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)
。
或者,将FullName
转换为计算列:
ALTER TABLE Names
DROP COLUMN FullName;
ALTER TABLE Names
ADD FullName AS (FirstName + ' ' + LastName);
此解决方案有三个明显的优势:
FullName
永远不会与FirstName
和LastName
发生冲突,因为它是通过指定的表达式自动派生出来的(在查询时)。FullName
指定类型; SQL Server根据表达式自动计算出来。FullName
不会占用任何存储空间(除非它包含在索引中)。