使用SQL,如何使用自己的值更新行?

时间:2010-12-01 20:32:05

标签: sql sql-server

我有下表,我称之为'示例'

id name       last_name
01 Adam       Adams
02 Bill       Billo
03 Cathy      McCathyson

我需要修改表格并最终得到以下内容:

id name
01 Adam Adams
02 Bill Billo
03 Cathy McCathyson

对于单行,我知道如何编写此查询:

UPDATE example SET name = 
   (SELECT name FROM example WHERE id = 01)+" "
   +(SELECT last_name FROM example WHERE id = 01)
WHERE id = 01;

如何修改此查询,以便使用该行的值更新每一行,如示例所示?

编辑:我已经更新了我的示例,因为它混淆了这个问题。

3 个答案:

答案 0 :(得分:9)

UPDATE example SET NAME = NAME + ' ' + last_name

    ID NAME      LAST_NAME

     1 Adam       Adams
     2 Bill       Billo
     3 Cathy      McCathyson

SQL> UPDATE example SET NAME = NAME + ' ' + last_name
  2  /

3 rows updated

SQL> select * from example
  2  /

        ID NAME                    LAST_NAME
---------- -----------------------------------------
         1 Adam Adams              Adams
         2 Bill Billo              Billo
         3 Cathy McCathyson        McCathyson

答案 1 :(得分:7)

您可能需要考虑将其添加为computed column。这样,该列是虚拟的,因此您不会使用额外的存储空间。此外,对name或last_name的任何更改都会自动反映在新列中,而无需任何干预。

编辑:根据示例中的更改修改了代码。

alter table example
    add full_name as coalesce(name+' ','') + last_name

答案 2 :(得分:4)

注意:这个答案是基于问题的第一个问题。相同的一般原则适用于修订版本,因此我没有更新列名以保持同步。

@ n8wrl在评论中提出了一个很好的问题,但回答了你的问题(假设颜色和文字都是字符数据,所以不需要任何演员)。

此外,我假设非列可以为空。如果它们然后连接NULL将产生NULL,假设您有ANSI默认选项。如果这不是所需的行为,则需要使用ISNULL(color,'')等。

DECLARE @example  table 
(
id int NOT NULL,
color char(6) NOT NULL,
text varchar(100) NOT NULL
)
insert into @example
SELECT 01, '990000',   'Red' UNION ALL
SELECT 02, '009900',   'Green' UNION ALL
SELECT 03, '000099',   'Blue'

UPDATE @example SET text = '<span style=''color: #'
   +color+'''>'
   +text+'</span>'
/*WHERE id = 01;*/

SELECT * FROM @example

我不得不说我怀疑以这种格式存储它是一个好主意。这意味着您将存储大量冗余字符,这意味着更少的行将适合数据页面,更大的I / O和更低效的内存使用