子查询可以(以任何方式)修改 SQL 中的数据库吗?

Can (in any ways) a subquery modify the database in SQL?

以上说法总是正确的,还是有例外?

换句话说,我们可以创建包含 update 命令的子查询吗?

我不知道有 AFTER | 的 RDMBS INSTEAD OF Select 触发器已实现,但在这种情况下 SELECT 可以间接修改数据库。

您的服务器上也可能设置了一个审计设置,用于跟踪 SELECT 语句。例如,在 Oracle 中,您有 DBMS_FGA 包,您可以通过创建不带 audit_condition 参数的策略来实质上创建 ON SELECT 触发器。这将导致每 select 触发一个事件,并导致一个修改数据库的过程被执行。我不知道这种情况下的事务,但我认为回滚不会影响审计,否则很容易欺骗它:)。

另一个例子(Sql服务器):

Select * from 
OPENQUERY(servername, 'EXEC uspGetRows')

uspGetRows 除了返回行之外,过程还可以做很多其他事情。

我认为您更愿意通过 insert/update/delete 语句 "merged" 和 select 进行显式修改,但我从未听说过这样的事情。因此,这些只是与评论中的 INSERT..INTO 类似情况的两个示例。