【问题标题】:SQL INSERT @tableVar SELECT ... is only insertSQL INSERT @tableVar SELECT ... 只是插入
【发布时间】:2011-06-30 17:42:37
【问题描述】:

我需要用多个表中的值填充数据集。

我创建了一个stored procedure 来执行多个SELECT 语句。

每个SELECT 都有共同的部分。

我决定缓存这些常用部分的结果。

现在我需要能够将结果输出到表变量的SELECT 构造。

INSERT @tableVar SELECT ... 只插入数据而不选择它。

我的意图类似于SELECT * OUTPUT SELECTED.* INTO @tableVar FROM ...

可以这样操作吗?

【问题讨论】:

  • 请删除 C# 和 .net 标签,因为这只与 SQL 有关。

标签: sql sql-server sql-server-2008-r2


【解决方案1】:
INSERT @tableVar 
  OUTPUT INSERTED.* 
  SELECT * 
  FROM [...]

【讨论】:

  • +1,SQL Server 2005+ 有OUTPUT 子句,它允许单个INSERT 语句插入两个表(原始插入+输出插入)并返回结果集 all同时来自一个语句。
  • 这是一个非常有趣的解决方案,可惜 select 不允许嵌套插入 OUTPUT INSERTED.*,类似于 SELECT FROM (INSERT ... OUTPUT INSERTED.* ... )跨度>
【解决方案2】:

您可以在第一次插入后进行选择:

INSERT @probes
SELECT P.ID, P.ContainerID, P.EstimateID
FROM Probes AS P
WHERE P.LockedBy = @lockedBy

SELECT * FROM @probes

SELECT C.ID, C.Data
FROM Containers AS C
INNER JOIN
(
    SELECT DISTINCT P.ContainerID
    FROM @probes AS P
) AS X ON C.ID = X.ContainerID

SELECT E.ID, E.ObjectiveID, E.[Time]
FROM Estimates AS E
INNER JOIN
(
    SELECT DISTINCT P.EstimateID
    FROM @probes AS P
) AS X ON X.EstimateID = E.ID

【讨论】:

  • 是的,我知道,但是可以一次操作吗?
猜你喜欢
  • 1970-01-01
  • 2016-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
  • 2019-01-24
相关资源
最近更新 更多