Πώς μπορώ να κάνω UPDATE από ένα SELECT στον SQL Server;

Στον SQL Server, είναι δυνατή η "εισαγωγή" σε έναν πίνακα χρησιμοποιώντας μια δήλωση "SELECT":

INSERT INTO Table (col1, col2, col3)
SELECT col1, col2, col3 
FROM other_table 
WHERE sql = 'cool'

Είναι επίσης δυνατή η ενημέρωση μέσω μιας SELECT; Έχω έναν προσωρινό πίνακα που περιέχει τις τιμές και θα ήθελα να ενημερώσω έναν άλλο πίνακα χρησιμοποιώντας αυτές τις τιμές. Ίσως κάτι τέτοιο:

UPDATE Table SET col1, col2
SELECT col1, col2 
FROM other_table 
WHERE sql = 'cool'
WHERE Table.id = other_table.id
Λύση
UPDATE
    Table_A
SET
    Table_A.col1 = Table_B.col1,
    Table_A.col2 = Table_B.col2
FROM
    Some_Table AS Table_A
    INNER JOIN Other_Table AS Table_B
        ON Table_A.id = Table_B.id
WHERE
    Table_A.col3 = 'cool'
Σχόλια (7)

Θα τροποποιούσα την εξαιρετική απάντηση του Robin ως εξής:

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
)

Χωρίς ρήτρα WHERE, θα επηρεάσετε ακόμη και γραμμές που δεν χρειάζεται να επηρεαστούν, γεγονός που θα μπορούσε (ενδεχομένως) να προκαλέσει επαναϋπολογισμό του δείκτη ή να πυροδοτήσει πυροκροτητές που πραγματικά δεν θα έπρεπε να πυροδοτηθούν.

Σχόλια (6)

Ένας τρόπος

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'
Σχόλια (0)