1

可能重复:
如何在 SQL Server 2005 的一个语句中更新两个表?

我有两张表,需要更新一张表并对另一张表生效。

这两个表通过关系链接

t1.col1 PK , t2.col1 FK   

t1                t2
_____________  _____________
|col1|  col2|  |col1 |col2 |            
|----|------|  |-----|-----|                             
|1   |  a   |  | 1   | d   |            
|2   |  b   |  | 2   | e   |            
|3   |  c   |  | 3   | f   |            
|____|______|  |_____|_____|

如何在 SQL Server 2008 的一个查询中更新这两个表?

我想做这样的事情

 Update College 
 Inner Join Class ON College.CollegeId = Class.CollegeId 
 set College.CollegeId = '33333333-3333-3333-3333-333333333333',
     Class.CollegeId = '33333333-3333-3333-3333-333333333333' 
 where 
     College.CollegeId = '071887ea-3c93-40ce-a112-3b849d352064' 

但我收到一个错误:

关键字“Inner”附近的语法不正确

4

3 回答 3

2

您可以这样实现:
您可以使用事务二确保两个 UPDATE 语句被正确处理。

BEGIN TRANSACTION

UPDATE Table1
  SET Table1.col1= 'XXXX' 
FROM Table1 T1, Table2 T2
WHERE T1.id = T2.id
and T1.id = '010008'

UPDATE Table2
SET Table2.col1 = 'XXXX'
FROM Table1 T1, Table2 T2
WHERE T1.id = T2.id
and T1.id = '010008'

犯罪

于 2012-06-04T08:28:48.610 回答
2

无论您是在一个连接上的一个查询中使用一条语句更新 2 个表,还是在一个连接上的一个查询中使用两条语句更新 2 个表,这实际上是一回事。

您可以设置参数以传递给脚本,然后您只需发送一次值并运行一次脚本,这又将只使用一个连接。

declare @OldCollegeID
declare @NewCollegeID

Update Class set CollegeID = @NewCollegeID
where CollegeID = @OldCollegeID

Update College set CollegeID = @NewCollegeID
where CollegeID = @OldCollegeID

但是,我猜您要同时执行此操作的原因是因为由于关系,您不能在不更新课程的情况下先更新大学?由于外键 Class.CollegeID,尝试更新 College.CollegeID 将导致错误。反之亦然。除非您要更新到的 Class.CollegeID 存在于 College.CollegeID 中,否则 Class.CollegeID 将不可更新。在这种情况下,我将提出以下建议:

Create Procedure UpdateCollegeID
(
   declare @OldCollegeID varchar(100),
   declare @NewCollegeID varchar(100)
)

as

declare @CollegeName varchar(100)
declare @ClassName varchar(100)

set @CollegeName = (select CollegeName from College where CollegeID = @OldCollegeID)
set @ClassName = (select ClassName from Class where CollegeID = @OldCollegeID)

Insert into College (CollegeID, CollegeName)
Values(@NewCollegeID, @NewCollegeName)

Insert into Class (ClassID, CollegeID)
Values(@ClassID, @NewCollegeID, @ClassName)

Delete from Class where CollegeID = @OldCollegeID
Delete from College where CollegeID = @OldCollegeID

This will update all your old college records with the new id and you wont have to worry. You might have to do something differently in your front end application to cater for this depending on what it is. Keeping it a stored procedure will allow you to exec it and everything will update to the parameters passed.

于 2012-06-04T09:55:05.200 回答
-2

您可以执行以下操作

 UPDATE T1 INNER JOIN T2 ON T1.COL1 = T2.COL1 SET T1.COL2 = 'X', T2.COL2= 'Y'
 WHERE T1.COL1 = 2

快乐编码!!!

于 2012-06-04T08:22:58.487 回答