En utilisant SQL, comment mettre à jour des lignes, en utilisant leurs propres valeurs?

J'ai le tableau suivant que j'appellerai 'exemple'

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

J'ai besoin de modifier la table et finir avec ce qui suit:

 id name 01 Adam Adams 02 Bill Billo 03 Cathy McCathyson 

Pour une seule ligne, je sais écrire cette requête:

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

Comment puis-je modifier cette requête afin qu'elle mette à jour chaque ligne avec les valeurs de cette ligne, comme dans l'exemple?

EDIT: J'ai mis à jour mon exemple car il a confondu le problème.

 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 

Vous pouvez envisager d'append cela en tant que colonne calculée . De cette façon, la colonne est virtuelle, vous n'utilisez donc pas d'espace de stockage supplémentaire. De plus, toutes les modifications apscopes au nom ou au nom de famille sont automatiquement répercutées dans la nouvelle colonne sans aucune intervention.

EDIT : code modifié basé sur le changement dans l'exemple.

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

NB: Cette réponse était basée sur la première incarnation de la question. Les mêmes principes généraux s'appliquent à la version révisée, donc je n'ai pas mis à jour les noms des colonnes à synchroniser.

@ n8wrl soulève une bonne question dans les commentaires mais pour répondre à votre question (en supposant que la couleur et le text sont à la fois des données de personnage et n'ont donc pas besoin de casting).

Aussi j'ai supposé que non des colonnes sont nullables. S'ils sont concaténés alors NULL donnera NULL supposant que vous avez des options par défaut ANSI. Si ce n'est pas le comportement souhaité, vous devrez utiliser ISNULL(color,'') etc.

 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 

Je dois dire que je doute que le stocker dans ce format est une bonne idée. Cela signifie que vous allez stocker beaucoup de caractères redondants, ce qui signifie que less de lignes s'ajusteront sur une page de données et augmenteront les E / S et l'utilisation de la memory.