2010-01-27 71 views
3

2列这是我在SQL Server 2008中查询 -更新与内部联接,更新两个表

UPDATE a 
     SET a.col2 = 'new', 
      a.col3 = 'www.google.com', 
      b.col1 = '10' 
     FROM table a 
INNER JOIN table b ON a.col1 = b.col1 
    WHERE a.col1 = 7 

崩溃,指出“无效列名b.col1。”

我该如何做这项工作?

回答

4

从更近一点看你的查询,你在UPDATE语句中有b.Col1。这是不正确

UPDATE a 
SET a.col2='new', 
     a.col3='www.google.com', 
     b.col1='10' 
FROM @table a INNER JOIN 
     @table b ON a.col1 = b.col1 
WHERE a.col1=7 

UPDATE你只能在一个时间更新1台

+0

你不能更新表1和表B与1更新语句 – SQLMenace 2010-01-27 18:01:23

+0

是的,我认为这就是我说的。 *从UPDATE,你一次只能更新1个表格* – 2010-01-27 18:02:31

+0

oops ..没有看到那部分 – SQLMenace 2010-01-27 18:03:19

9

你只能在一个时间

需要发出2个update语句

UPDATE a SET a.col2='new', a.col3='www.google.com' 
FROM tablea a INNER JOIN tableb b ON a.col1 = b.col1 
WHERE a.col1=7 

UPDATE b SET b.col1='10' 
FROM tablea a INNER JOIN tableb b ON a.col1 = b.col1 
WHERE a.col1=7 
更新1台
1

您的语句是“更新A”,并且您试图更新表B中的列。您可能想创建一个包含表A和B中的列的视图,并且您更新。您也可以为表A创建触发器 - 可能会更新表B中适当的连接列。

+0

即使有一个视图,你一次只能更新1个基本表格..除非你添加一个触发器到视图 – SQLMenace 2010-01-27 18:08:34

0

要根据第二个表中另一列上的条件更新1个表中的列值,此工作适用于我:

UPDATE TableA 
SET TableA.col1 = 'dummyVal' 
WHERE TableA .ACCID IN (SELECT ACCID FROM TableB WHERE TableB.PRODID LIKE 'XYZ')