如何从SQL命令中的SELECT更新?

时间:2018-06-08 13:53:45

标签: c# sql-server

我需要使用单个查询同时更新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'

1 个答案:

答案 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。