我想一次更新两个表。如何在SQL Server 2005中做到这一点?

UPDATE 
  Table1, 
  Table2
SET 
  Table1.LastName='DR. XXXXXX', 
  Table2.WAprrs='start,stop'
FROM 
  Table1 T1, 
  Table2 T2
WHERE 
  T1.id = T2.id
AND 
  T1.id = '010008'

当前回答

对于基于Table2特定列的table1特定列的常规更新,这个查询工作完美:

UPDATE table 1  
SET Col 2 = t2.Col2,  
    Col 3 = t2.Col3  
FROM table1 t1  
INNER JOIN table 2 t2 ON t1.Col1 = t2.col1 

其他回答

对不起,afaik,你不能那样做。要更新两个不同表中的属性,需要执行两条单独的语句。但是它们可以是批处理的(在一次往返中发送给服务器的一组SQL)

它就像下面显示的查询一样简单。

UPDATE 
  Table1 T1 join Table2 T2 on T1.id = T2.id
SET 
  T1.LastName='DR. XXXXXX', 
  T2.WAprrs='start,stop'
WHERE 
  T1.id = '010008'

这适用于MySQL,实际上只是一个隐式事务,但它应该是这样的:

UPDATE Table1 t1, Table2 t2 SET 
t2.field = t2.field+2,
t1.field = t1.field+2

WHERE t1.id = t2.foreign_id and t2.id = '123414'

如果你要对多个表进行更新,需要多条语句,如果你先更新一个表,然后根据其他条件更新另一个表,这很可能是可能的,你应该使用事务。

您不能在一条语句中更新多个表,但是,您可以使用一个事务来确保两个update语句被原子地处理。您还可以批量处理它们以避免往返。

BEGIN TRANSACTION;

UPDATE Table1
SET Table1.LastName = 'DR. XXXXXX' 
FROM Table1 T1, Table2 T2
WHERE T1.id = T2.id
and T1.id = '011008';

UPDATE Table2
SET Table2.WAprrs = 'start,stop'
FROM Table1 T1, Table2 T2
WHERE T1.id = T2.id
and T1.id = '011008';

COMMIT;

对于基于Table2特定列的table1特定列的常规更新,这个查询工作完美:

UPDATE table 1  
SET Col 2 = t2.Col2,  
    Col 3 = t2.Col3  
FROM table1 t1  
INNER JOIN table 2 t2 ON t1.Col1 = t2.col1