将INSERT INTO和WITH / CTE结合

我的CTE非常复杂,我想将结果插入物理表中。


以下有效吗?


INSERT INTO dbo.prf_BatchItemAdditionalAPartyNos 

(

    BatchID,

    AccountNo,

    APartyNo,

    SourceRowID

)       

WITH tab (

  -- some query

)    

SELECT * FROM tab

我正在考虑使用一个函数来创建此CTE,这将允许我重复使用。有什么想法吗?


慕森卡
浏览 1797回答 3
3回答

莫回无

您需要先放置CTE,然后将INSERT INTO与select语句结合在一起。而且,CTE名称后面的“ AS”关键字不是可选的:WITH tab AS (    bla bla)INSERT INTO dbo.prf_BatchItemAdditionalAPartyNos (BatchID,AccountNo,APartyNo,SourceRowID)  SELECT * FROM tab请注意,该代码假定CTE将恰好返回四个字段,并且这些字段的顺序和类型与INSERT语句中指定的匹配。如果不是这种情况,只需将“ SELECT *”替换为所需的特定字段即可。至于您对使用函数的问题,我会说“取决于”。如果仅出于性能原因将数据放在表中,并且通过函数使用它时速度是可以接受的,那么我认为函数是一种选择。另一方面,如果您需要在几个不同的查询中使用CTE的结果,而速度已经成为问题,那么我会选择一个表(常规表或临时表)。带common_table_expression(Transact-SQL)

三国纷争

是的:WITH tab (  bla bla)INSERT INTO dbo.prf_BatchItemAdditionalAPartyNos (  BatchID,                                                        AccountNo,APartyNo,SourceRowID)    SELECT * FROM tab请注意,这是针对SQL Server的,它支持多个CTE:WITH x AS (), y AS () INSERT INTO z (a, b, c) SELECT a, b, c FROM yTeradata仅允许一个CTE,并且语法示例。
打开App,查看更多内容
随时随地看视频慕课网APP