c# - 如何从 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'
解决方案
您不能使用单个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。
推荐阅读
- c++ - 我的数组程序中这个堆栈粉碎错误的原因是什么?
- node.js - 您的全局 Angular CLI 版本 (11.0.5) 高于本地版本 (1.1.0)。使用本地 Angular CLI 版本
- css - 连续对齐多个文本框反应原生
- postgresql - 通过 docker-compose 连接 Spring Cloud DataFlow 和 Postgresql-db
- android - `addListenerForSingleValueEvent()` 未在 android firebase 中触发
- firebase - 升级到 firebase admin (8.19.0) 后,--import of database 不允许修改数据库
- python - python Webscrape请求与硒
- c# - WPF。将列表框项模板内的绑定到 ObservableCollection 源。源 PropertyChanged 被忽略
- c# - 从 Windows 通知中获取按钮事件
- java - 为什么以 jar 运行时会出现 java.lang.ClassNotFoundException,但与 IntelliJ IDEA 配合得很好