我需要使用单个查询同时更新Book表和Stock表。因为Book表中的ISBN_No等于stock表中的ISBN_No。我想知道如何将查询放在现有的更新语句中。
UPDATE Table_A
SET Table_A.ISBN_No = Table_B.ISBN_No,
FROM TBL_Book AS Table_A
INNER JOIN TBL_Stock AS Table_B ON Table_A.ISBN_No = Table_B.ISBN_No
WHERE Table_A.ISBN_No = 'datagridview column name'
答案 0 :(得分:1)
您无法使用单个update
查询一次更新2个表。
如果您需要以原子方式更新2个表,则可以使用事务:
begin tran
update Table_A
set Table_A.ISBN_No = ...
update Table_B
set Table_B.ISBN_No = ...
commit
请注意,您可以将此更新捆绑到一个存储过程中。如果您在.NET应用程序中作为IDataAdapter命令的一部分执行此更新查询,则可以使用存储过程作为命令,并将ISBN号作为参数传递给过程。
另请注意,SET XACT_ABORT ON
可确保其中一个语句中的错误中止您的事务并立即返回错误。否则,如果Table_A更新失败,Table_B更新将继续在事务之外进行(取决于错误严重性)。
如果有一个foreign key将Table_B.ISBN_No与Table_A.ISBN_No相关联,并且外键设置为ON UPDATE CASCADE
,则更新Table_A.ISBN_No将自动更新Table_B.ISBN_No。