4263 votes

Mise à JOUR à partir de SÉLECTIONNER à l'aide de SQL Server

Dans SQL Server, vous pouvez insérer dans une table à l'aide d'une instruction select:

INSERT INTO table(col,col2,col3)
SELECT col,col2,col3 FROM other_table WHERE sql = 'cool'

Comment puis-je mettre à jour via un select ainsi de la même manière? J'ai une table temporaire qui a les valeurs, et je veux mettre à jour une autre table à l'aide de ces valeurs.

Quelque chose comme ceci:

UPDATE Table SET col1,col2
SELECT col1,col2 FROM other_table WHERE sql = 'cool'
WHERE Table.id = other_table.id

6010voto

Robin Day Points 39440
UPDATE
    Table
SET
    Table.col1 = other_table.col1,
    Table.col2 = other_table.col2
FROM
    Table
INNER JOIN
    other_table
ON
    Table.id = other_table.id

880voto

onedaywhen Points 24594

Dans SQL Server 2008 (ou mieux), utilisez MERGE

MERGE INTO YourTable T
   USING other_table S 
      ON T.id = S.id
         AND S.tsql = 'cool'
WHEN MATCHED THEN
   UPDATE 
      SET col1 = S.col1, 
          col2 = S.col2;

Sinon:

MERGE INTO YourTable T
   USING (
          SELECT id, col1, col2 
            FROM other_table 
           WHERE tsql = 'cool'
         ) S
      ON T.id = S.id
WHEN MATCHED THEN
   UPDATE 
      SET col1 = S.col1, 
          col2 = S.col2;

855voto

Jamal Points 659
UPDATE Table SET Col1 = i.Col1, Col2 = i.Col2 
FROM (SELECT Col1, Col2 FROM  other_table) i
WHERE i.ID = Table.ID

310voto

quillbreaker Points 2843

Je voudrais modifier Robin est une excellente réponse à la suivante:

UPDATE
     Table 
SET
     Table.col1 = other_table.col1,
     Table.col2 = other_table.col2 
FROM
     Table 
INNER JOIN     
     other_table 
ON     
     Table.id = other_table.id 
WHERE
     Table.col1 != other_table.col1 or 
     Table.col2 != other_table.col2 or
     (other_table.col1 is not null and table.col1 is null) or
     (other_table.col2 is not null and table.col2 is null)

Sans clause where, vous allez toucher même les lignes qui n'ont pas besoin d'être touchés, ce qui pourrait (éventuellement) la cause de l'indice de recalcul ou des déclencheurs qui vraiment ne devrait pas avoir été tiré.

232voto

SQLMenace Points 68670

D'une manière

UPDATE t SET  t.col1 = o.col1, t.col2 = o.col2
FROM other_table o 
JOIN t ON t.id = o.id
WHERE o.sql = 'cool'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X