首页 > 解决方案 > 如何从 SQL 命令中的 SELECT 进行更新?

问题描述

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

标签: c#sql-server

解决方案


您不能使用单个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 更新将在事务之外继续进行(取决于错误严重性)。

如果Table_B.ISBN_No与Table_A.ISBN_No有关联的外键,且外键设置为ON UPDATE CASCADE则更新Table_A.ISBN_No会自动更新Table_B.ISBN_No。


推荐阅读