首页 > 解决方案 > SELECT 语句可以同时返回数据和 INSERT 到另一个 SQL 表吗?

问题描述

下面查询读取相同数据的客户表两次;

  1. 将选定的字段插入临时表以供以后使用,以及
  2. 将数据输出到调用它的应用程序

是否有任何 SQL SELECT 语句变体可以同时实现这两个目标?(即没有两次读取数据?)

declare @CustomerID int = 1234
declare @IDsFromCustomer1 table (CustomerID int, TerritoryID int)

--IDs from Customer table
insert into @IDsFromCustomer1(CustomerID, TerritoryID)
    select CustomerID, TerritoryID
    from [Customer] 
    where [Customer].CustomerID = @CustomerID

--Return Customer table
    select [Customer].*
    from [Customer] 
    where [Customer].CustomerID = @CustomerID

标签: sql-server

解决方案


您可以使用 INSERT 语句的 OUTPUT 子句

declare @CustomerID int = 1234
declare @IDsFromCustomer1 table (CustomerID int, TerritoryID int)

insert into @IDsFromCustomer1(CustomerID, TerritoryID)
output inserted.*
    select @CustomerID CustomerID,
           @CustomerID TerritoryID;

select * from @IDsFromCustomer1;

此脚本返回 2 个相同的查询输出。首先,从 INSERT 语句的 OUTPUT 返回一行。其次,所有行都从@IDsFromCustomer1 返回。


推荐阅读