Sql server SQL Server多目标插入,是否存在?

Sql server SQL Server多目标插入,是否存在?,sql-server,Sql Server,我最近建议重构一些数据处理代码,系统的一部分在表中构建一些中间数据集,然后将一些摘要/聚合记录插入到两个单独的表中。由于中间数据并没有被实际使用,所以在磁盘上具体化它只是为了将其用于一些下游处理,这似乎是一种资源浪费。例如,表A被构造,然后有INSERT-SELECT语句,它们的FROM子句中都有表A,将记录添加到表B、C和D中。表A在将B、C和D插入后被截断 如果只有一个输出表,我想这是毫无疑问的——只需将中间数据的SELECT语句合并到最终的INSERT-SELECT语句中即可。但是由于有三

我最近建议重构一些数据处理代码,系统的一部分在表中构建一些中间数据集,然后将一些摘要/聚合记录插入到两个单独的表中。由于中间数据并没有被实际使用,所以在磁盘上具体化它只是为了将其用于一些下游处理,这似乎是一种资源浪费。例如,表A被构造,然后有INSERT-SELECT语句,它们的FROM子句中都有表A,将记录添加到表B、C和D中。表A在将B、C和D插入后被截断

如果只有一个输出表,我想这是毫无疑问的——只需将中间数据的SELECT语句合并到最终的INSERT-SELECT语句中即可。但是由于有三个输出,我不知道如何编写一个查询来实现这一点。我能想到的最接近的事情是将公共逻辑合并到每个INSERT-SELECT中,这将引入冗余处理,这只是另一种形式的浪费

是否可以在一条SQL语句中插入多个表

注:


我可以使用临时表或表值变量来保存中间数据,但这仍然需要程序员存储中间数据。我的问题的一部分是,如果这种多插入是可能的,那么查询优化器/DB引擎将处理中间数据存储,而不是程序员,可能做得更好。 我知道我应该根据性能测试来选择一个替代方案,而不是从理论上推测什么更快或更慢,但这个问题不是关于选择一个替代方案。它询问是否存在特定的替代方案。 是否可以在一条SQL语句中插入多个表

是的,但可能不是以一种对你很有用的方式。您可以插入到一个表中,然后使用OUTPUT子句从该in插入到另一个表中,但不能对从第一个表传递到第二个表的流执行任何转换,除非添加WHERE或由于IGNORE_DUP_键而丢弃行


触发器也可能从技术上回答您的问题,但这只是隐藏了次要语句,并将处理移动到创建的附加插入伪表上。

我可以使用临时表或表值变量来保存中间数据-小心使用表变量,它们不能像临时表那样被索引。它们本质上是堆。如果您正在处理/加入许多记录,那么您应该使用临时表而不是@表变量,并考虑根据需要添加适当的索引。技术上是的,您可以在单语句中插入两次。但我怀疑这个结构能解决你的问题,这很有趣。。。我以前没有见过OUTPUT子句。我要调查一下,看是否有帮助。另一方面,触发器不是我想要的方向——正如您已经猜到的: