UPDATE Table_A SET Table_A.col1 = Table_B.col1, Table_A.col2 = Table_B.col2 FROM Some_Table AS Table_A INNERJOIN Other_Table AS Table_B ON Table_A.id = Table_B.id WHERE Table_A.col3 ='cool'
2. 使用MERGE语句
MERGE语句可以在一个语句中完成插入、更新和删除操作。在SQL Server 2008及更高版本中可以使用。
1 2 3 4 5 6 7 8
MERGEINTO 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;
3. 使用子查询进行UPDATE
可以在UPDATE语句中使用子查询来获取需要更新的值。
1 2 3 4 5 6 7 8
UPDATE YourTable SET Col1 = OtherTable.Col1, Col2 = OtherTable.Col2 FROM ( SELECT ID, Col1, Col2 FROM other_table) AS OtherTable WHERE OtherTable.ID = YourTable.ID
4. 使用公共表表达式(CTE)进行UPDATE
CTE可以使查询更加清晰和易于维护。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
;WITH CTE AS (SELECT T1.Col1, T2.Col1 AS _Col1, T1.Col2, T2.Col2 AS _Col2 FROM T1 JOIN T2 ON T1.id = T2.id WHEREEXISTS(SELECT T1.Col1, T1.Col2 EXCEPT SELECT T2.Col1, T2.Col2)) UPDATE CTE SET Col1 = _Col1, Col2 = _Col2;
核心代码
以下是几种常见方法的核心代码示例:
使用JOIN
1 2 3 4 5 6 7 8 9
UPDATETable SET Table.col1 = other_table.col1, Table.col2 = other_table.col2 FROM Table INNERJOIN other_table ON Table.id = other_table.id WHERE Table.col1 != other_table.col1 OR Table.col2 != other_table.col2
使用MERGE
1 2 3 4 5 6 7
MERGEINTO YourTable T USING other_table S ON T.id = S.id WHEN MATCHED THEN UPDATE SET col1 = S.col1, col2 = S.col2;
使用子查询
1 2 3 4 5 6 7 8
UPDATE YourTable SET Col1 = OtherTable.Col1, Col2 = OtherTable.Col2 FROM ( SELECT ID, Col1, Col2 FROM other_table) AS OtherTable WHERE OtherTable.ID = YourTable.ID
使用CTE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
;WITH CTE AS (SELECT T1.Col1, T2.Col1 AS _Col1, T1.Col2, T2.Col2 AS _Col2 FROM T1 JOIN T2 ON T1.id = T2.id WHEREEXISTS(SELECT T1.Col1, T1.Col2 EXCEPT SELECT T2.Col1, T2.Col2)) UPDATE CTE SET Col1 = _Col1, Col2 = _Col2;
BEGIN TRANSACTION; UPDATETable SET Table.col1 = other_table.col1, Table.col2 = other_table.col2 FROM Table INNERJOIN other_table ON Table.id = other_table.id WHERE Table.col1 != other_table.col1 OR Table.col2 != other_table.col2;