亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將INSERT INTO和WITH / CTE結合

將INSERT INTO和WITH / CTE結合

慕森卡 2019-11-28 15:11:09
我的CTE非常復雜,我想將結果插入物理表中。以下有效嗎?INSERT INTO dbo.prf_BatchItemAdditionalAPartyNos (    BatchID,    AccountNo,    APartyNo,    SourceRowID)       WITH tab (  -- some query)    SELECT * FROM tab我正在考慮使用一個函數來創建此CTE,這將允許我重復使用。有什么想法嗎?
查看完整描述

3 回答

?
莫回無

TA貢獻1865條經驗 獲得超7個贊

您需要先放置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)


查看完整回答
反對 回復 2019-11-28
?
三國紛爭

TA貢獻1804條經驗 獲得超7個贊

是的:


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 y

Teradata僅允許一個CTE,并且語法示例。


查看完整回答
反對 回復 2019-11-28
  • 3 回答
  • 0 關注
  • 1978 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號