日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

[导入]SQL中的临时表和表变量

發(fā)布時(shí)間:2025/1/21 数据库 71 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [导入]SQL中的临时表和表变量 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我們經(jīng)常使用臨時(shí)表和表變量,那現(xiàn)在我們就對(duì)臨時(shí)表和表變量進(jìn)行一下討論.

臨時(shí)表

局部臨時(shí)表

全局臨時(shí)表

表變量


??????????????????????????????

臨時(shí)表

臨 時(shí)表存儲(chǔ)在TempDB數(shù)據(jù)庫(kù)中,所有的使用此SQL?Server?實(shí)例的用戶都共享這個(gè)TempDB,因?yàn)槲覀儜?yīng)該確保用來存儲(chǔ)TempDB數(shù)據(jù)庫(kù)的 硬盤有足夠的空間,以使之能夠自己的增長(zhǎng).最好能夠存儲(chǔ)在一個(gè)擁有獨(dú)立硬盤控制器上.因?yàn)檫@樣不存在和其它的硬盤I/O進(jìn)行爭(zhēng)用.

?

我 們很多程序員認(rèn)為臨時(shí)表非常危險(xiǎn),因?yàn)榕R時(shí)表有可能被多個(gè)連接所共享.其實(shí)在SQL?Server中存在兩種臨時(shí)表:局部臨時(shí)表和全局臨時(shí)表,局部臨時(shí)表 (Local?temp?table)以#前綴來標(biāo)識(shí),并且只能被創(chuàng)建它的連接所使用.全局臨時(shí)表(Global?temp?table)以##前綴來進(jìn) 行標(biāo)識(shí),并且可以和其它連接所共享.

?

局部臨時(shí)表

局部臨時(shí)表不能夠被其它連接所共享的原因其實(shí)是在SQL?Server?2000中自動(dòng)為局部臨時(shí)表的表名后面加上了一個(gè)唯一字符來標(biāo)識(shí).如:?

?????CREATE?TABLE?[#DimCustomer_test]

?????(

????????[CustomerKey]?[int]

????????,???[FirstName]?[nvarchar](50)??

????,[MiddleName]?[nvarchar](50)??

????,[LastName]?[nvarchar](50)?

????????)

現(xiàn)在我們來查看一下TempDB中?sysobjects表,我們會(huì)發(fā)現(xiàn)我們新創(chuàng)建的臨時(shí)表#DimCustomer_test已經(jīng)被加上了后綴:

?

??USE?TempDB

??GO

??SELECT?name?FROM?sysobjects?WHERE?name?LIKE?’%DimCustomer%’

?

the?Result?is:

name

#DimCustomer_test___________________________________________________________________________________________________000000000005

全局臨時(shí)表

下面我們來看一下全局臨時(shí)表:

?????CREATE?TABLE?[##DimCustomer_test]

?????(

????????[CustomerKey]?[int]

????????,??????[FirstName]?[nvarchar](50)??

????,[MiddleName]?[nvarchar](50)??

????,[LastName]?[nvarchar](50)?

????????)


現(xiàn)在我們來查看一下TempDB中?sysobjects表,我們會(huì)發(fā)現(xiàn)我們新創(chuàng)建的臨時(shí)表##DimCustomer_test沒有被加上了后綴:

?

??USE?TempDB

??GO

??SELECT?name?FROM?sysobjects?WHERE?name?LIKE?’%DimCustomer%’

?

The?Result?are:

#DimCustomer_test___________________________________________________________________________________________________000000000005

##DimCustomer_test

?

--Drop?test?temp?tables

??????????????????????????????DROP?TABLE?[##DimCustomer_test]

??????????????????????????????DROP?TABLE?[#DimCustomer_test]

?

可以看到我們剛才創(chuàng)建的全局臨時(shí)表名字并沒有被加上標(biāo)識(shí).

?

表變量

表變量和臨時(shí)表針對(duì)我們使用人員來說并沒有什么不同,但是在存儲(chǔ)方面來說,他們是不同的,表變量存儲(chǔ)在內(nèi)存中.所以在性能上和臨時(shí)表相比會(huì)更好些!

?

另一個(gè)不同的地方是在表連接中使用表變量時(shí),要為此表變量指定別名.如:

?

??USE?AdventureWorksDW

??GO



??DECLARE?@DimCustomer_test?TABLE?

??(

?????[CustomerKey]?[int]

?????,??????[FirstName]?[nvarchar](50)??

?,[MiddleName]?[nvarchar](50)??

?,[LastName]?[nvarchar](50)?

?????)

??---insert?data?to?@DimCustomer_test

??INSERT?@DimCustomer_test?

??(

?????[CustomerKey]??

?????,??????[FirstName]??

?,[MiddleName]??

?,[LastName]?

?????)

??SELECT??

?????[CustomerKey]??

?????,??????[FirstName]??

?,[MiddleName]??

?,[LastName]?

??FROM?DimCustomer



??SELECT?[@DimCustomer_test].CustomerKey,SUM(FactInternetSales.OrderQuantity)

?FROM?@DimCustomer_test??INNER?JOIN?FactInternetSales???ON

?@DimCustomer_test.CustomerKey?=?FactInternetSales.CustomerKey

?Group?BY?CustomerKey

?

Result:

?

Server:?Msg?137,?Level?15,?State?2,?Line?32

Must?declare?the?variable?’@DimCustomer_test’.

?

?

如果我們對(duì)上面的查詢進(jìn)行更改,對(duì)查詢使用別名(并且找開IO):

-----in?the?follow?script,we?used?the?table?alias.



?DECLARE?@DimCustomer_test?TABLE?

?(

????[CustomerKey]?[int]

????,??????[FirstName]?[nvarchar](50)??

,[MiddleName]?[nvarchar](50)??

,[LastName]?[nvarchar](50)?

????)



?INSERT?@DimCustomer_test?

?(

????[CustomerKey]??

????,??????[FirstName]??

,[MiddleName]??

,[LastName]?

????)

?SELECT??

????[CustomerKey]??

????,??????[FirstName]??

,[MiddleName]??

,[LastName]?

?FROM?DimCustomer



?SELECT?t.CustomerKey,f.OrderQuantity

?FROM?@DimCustomer_test?t?INNER?JOIN?FactInternetSales??f?ON

?t.CustomerKey?=?f.CustomerKey

?where?t.CustomerKey=13513

?

表變量在批處理結(jié)束時(shí)自動(dòng)被系統(tǒng)刪除,所以你不必要像使用臨時(shí)表表一樣顯示的對(duì)它進(jìn)行刪除.

文章來源:http://henrya2.blog.163.com/blog/static/754514192008102110528311

轉(zhuǎn)載于:https://www.cnblogs.com/Henrya2/archive/2008/11/21/1344246.html

總結(jié)

以上是生活随笔為你收集整理的[导入]SQL中的临时表和表变量的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。