【问题标题】:SQL: Using an INSERT within a SELECT statementSQL:在 SELECT 语句中使用 INSERT
【发布时间】:2010-11-09 05:40:21
【问题描述】:

我有一个 SQL SELECT 语句,它将以 XML 格式创建其结果。每次从原始 SELECT 语句中选择一行时,我都想插入另一个表(通过插入记录)。无论如何要在 SELECT 语句中包含 INSERT 语句吗?

    SELECT      cs_ads_StoreLocations.LocationGUID, *Bunch of Selects AS Distance 
FROM         *Bunch of Inter Joins*

WHERE     *Bunch of conditions*
ORDER BY *You don't want to know*
FOR XML AUTO

INSERT INTO cs_ads_StoreLog (LocationGUID) VALUES (*DISTINCT cs_ads_StoreLocations.LocationGUID from select statement above*)

这只是一些在 SELECT 语句之外有 INSERT 的示例代码。我需要在 SELECT 语句中包含它的东西或运行 INSERT 的其他方式

只是为了澄清。此示例代码是存储过程的一部分

【问题讨论】:

  • Eric 的回答是我所建议的,但您似乎坚持在 SELECT 中使用 INSERT - 这背后的原因是什么。此外,您似乎认为您可以对 SELECT 返回的每一行执行一些操作 - 不要忘记这是基于集合的处理 - SELECT 的结果是一组行,而不是个人的集合行。

标签: sql-server xml select insert


【解决方案1】:

INSERT 实际上会接受 SELECT 作为其输入。您可以只使用此命令(您的 SELECT 被复制为子查询,尽管您可以重构它以返回那些不带子查询的不同 GUID...但我需要查看整个怪物)。

insert into (cs_ads_StoreLog)
select distinct
    a.LocationGUID
from
    (SELECT
        cs_ads_StoreLocations.LocationGUID, *Bunch of Selects AS Distance 
    FROM
        *Bunch of Inter Joins*
    WHERE
        *Bunch of conditions*
    ORDER BY 
        *You don't want to know*
    ) a

然后,您可以只返回您拥有的SELECT(它会被缓存,因此您无需过多担心性能损失)。

【讨论】:

    【解决方案2】:

    也许动态 SQL 可以解决这个问题?示例here。 或者,也许您可​​以将值存储在表 var 中,然后对其进行插入。

    【讨论】:

    • 示例代码是存储过程的一部分。我只是想找到一种将 INSERT 包含在其中的方法。
    • 动态 SQL 和表变量可以在 SP 中使用。供参考。 :)
    猜你喜欢
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 2021-06-16
    • 2021-01-19
    • 2019-08-24
    • 2012-06-15
    相关资源
    最近更新 更多