資料庫中臨時表,表變數和CTE使用優勢極其區別

2021-08-18 13:44:50 字數 4154 閱讀 5045

1

在寫sql時經常會用到臨時表,表變數和cte,這三者在使用時各有優勢:

1. 臨時表:分為區域性臨時表和全域性臨時表.

1.1區域性臨時表,建立時以#開頭,在系統

資料庫tempdb中儲存. 在當前的鏈結可見,鏈結斷開則臨時表就自動被釋放,也可以手動drop table #tmptable

在使用不同的鏈結同時建立相同的臨時表時,互不影響,系統在tempdb中會自動附加以特定的session為標識的名字來區分. 常常在sp中使用,把需要操作的資料或者共同的資料取出放在臨時表中,後續可以進行其他的操作(select,update,delete,drop等).

可以像建立永久表一樣建立臨時表:

? 1

2

3

4

5

6

7

8

9

10

createtable#tmptable

(

idint,

namevarchar(10),

companyvarchar(50)

)

select*from#tmptablejoin...

droptable#tmptable

也可以使用into建立臨時表,如查詢employeeid=1的所有訂單,放在臨時表中,以備後續的處理.

? 1

2

3

4

selecte.employeeid,e.firstname,e.lastname,o.orderid,o.customerid,o.orderdate

into#tmptable

fromorders ojoinemployees eono.employeeid=e.employeeid

wheree.employeeid=1

1.2全域性臨時表,建立時以##開頭. 在tempdb中儲存,對所有的session都可見.

? 1

2

3

4

5

6

7

8

9

createtable##tmptable2

(

idint,

namevarchar(20),

companyvarchar(50)

)

select*from##tmptable2join...

droptable##tmptable2

2.表變數:在記憶體中儲存,比臨時表執行速度快. 在sp或者function越過有效scope之後會自動釋放,不用顯式的寫drop.表變數只可用在dml的操作中,會有比較多的限制.

? 1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

--直接宣告表變數

declare@vartabletable

(

idint,

namevarchar(20),

companyvarchar(50)

)

--先建立表型別

createtype [dbo].[t_temp]astable(

idint,

namevarchar(20),

companyvarchar(50)

)

--在宣告表變數

declare@vartable t_temp

3.cte(common table expressions)通用表表達:是乙個可以由定義語句引用的臨時命名的結果集,在它們的簡單形式中,可將 cte 視為類似於非持續性型別檢視的派生表.只須定義 cte 一次,即可在查詢中多次引用.

? 1

2

3

4

5

6

7

8

withcte_name

as

(

selecte.employeeid,e.firstname,e.lastname,o.orderid,o.customerid,o.orderdate

fromorders ojoinemployees eono.employeeid=e.employeeid

wheree.employeeid=1

)

select*fromcte_name

cte最強大之處在於遞迴查詢,如要仔細研究可以參考微軟的文章.

資料庫中臨時表 表變數和CTE使用優劣對比

資料庫中臨時表,表變數和cte使用優勢極其區別 view sourceprint?在寫sql時經常會用到臨時表,表變數和cte,這三者在使用時各有優勢 1.臨時表 分為區域性臨時表和全域性臨時表.1.1區域性臨時表,建立時以 開頭,在系統資料庫tempdb中儲存.在當前的鏈結可見,鏈結斷開則臨時表就...

資料庫中臨時表,表變數和CTE使用優勢極其區別

在寫sql時經常會用到臨時表,表變數和cte,這三者在使用時各有優勢 1.臨時表 分為區域性臨時表和全域性臨時表.1.1區域性臨時表,建立時以 開頭,在系統資料庫tempdb中儲存.在當前的鏈結可見,鏈結斷開則臨時表就自動被釋放,也可以手動drop table tmptable 在使用不同的鏈結同時...

資料庫中臨時表,表變數和CTE使用優勢極其區別

1 在寫sql時經常會用到臨時表,表變數和cte,這三者在使用時各有優勢 1.臨時表 分為區域性臨時表和全域性臨時表.1.1區域性臨時表,建立時以 開頭,在系統資料庫tempdb中儲存.在當前的鏈結可見,鏈結斷開則臨時表就自動被釋放,也可以手動drop table tmptable 在使用不同的鏈結...