我想一次更新两个表。如何在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'

当前回答

您可以为一个表编写更新语句,然后在第一个表更新时触发更新第二个表

其他回答

您不能在一条语句中更新多个表,但是,您可以使用一个事务来确保两个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;

你不能一次更新两个表,但是你可以使用OUTPUT into将一个更新链接到一个插入,并且你可以使用这个输出作为第二次更新的连接:

DECLARE @ids TABLE (id int);
BEGIN TRANSACTION

UPDATE Table1 
SET Table1.LastName = 'DR. XXXXXX'  
OUTPUT INSERTED.id INTO @ids
WHERE Table1.field = '010008';

UPDATE Table2 
SET Table2.WAprrs = 'start,stop' 
FROM Table2 
JOIN @ids i on i.id = Table2.id;

COMMIT;

我将示例WHERE条件更改为id以外的其他字段。如果它是id,你不需要这个花哨的输出,你可以更新相同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)

您应该在事务中放置两个更新语句