SQLSERVER 中表變數與臨時表

2022-02-18 17:04:05 字數 2822 閱讀 2149

sql server 中的變數表與臨時表

1.臨時表

臨時表和永久表類似,很多永久表具有的功能特性,臨時表都具有,臨時表它的建立是在tempdb中,它只有在乙個資料庫連線結束後或者由sql命名drop掉,才消失,否則他會一直存在,臨時表的建立的時候會產生sql server 系統日誌,

臨時表分為兩種:

一.以#開頭的本地臨時表,特點:只有在本地當前使用者連線中才是可見的,當使用者從例項中斷開連線後自動被刪除,

二.以##開頭的全域性臨時表,特點:建立後,任何使用者都可見,當所有使用者斷開連線後,被刪除。

--

本地臨時表的建立

create

table

#localtable

( id

int)

--全域性臨時表

create

table

##gobal(

id int

)

特別注意,儲存過程中的臨時表,在儲存過程結束後,就會被自動刪除(若果是巢狀在游標中的話,就不會刪除)

create

proc

proc_a

ascreate

table

#show(

id intnot

null

primary

keyidentity(1,1

), val

varchar(100

) )

insert

into #show values('a'

)

insert

into #show values('b'

)

insert

into #show values('c'

)

select

*from

#show

goexec

proc_a --

當儲存過程執行完畢之後,就自動的刪除了;若果是巢狀在游標中的話,就不會刪除)

select

*from #show --

訊息 208,級別 16,狀態 0,第 1 行 物件名 '#show' 無效。

演示約束條件的新增

--

建立乙個臨時表

create

table

#show(

id intnot

null

, title

varchar(100

), content

varchar(300

), datetimes

datetime)

--新增約束;

alter

table

#show

addconstraint constraint_name default(getdate()) for

datetimes,

primary

keyclustered

(id)

go

臨時表在建立之後可以修改許多已定義的選項,包括: 

1新增、修改、刪除列。例如,列的名稱、長度、資料型別、精度、小數字數以及為空性均可進行修改,只是有一些限制而已。 

2可新增或刪除主鍵和外來鍵約束。 

3可新增或刪除 unique 和 check 約束及 default 定義(物件)。 

4可使用 identity 或 rowguidcol 屬性新增或刪除識別符號列。雖然 rowguidcol 屬性也可新增至現有列或從現有列刪除,但是任何時候在表中只能有一列可具有該屬性。 

5)表及表中所選定的列已註冊為全文索引。 

2.表變數

它的申明是使用declare,表變數是變數的一種,表變數也分為本地及全域性的兩種,本地表變數的名稱都是以「@」為字首,只有在本地當前的使用者連線中才可以訪問。全域性的表變數的名稱都是以「@@」為字首,一般都是系統的全域性變數,像我們常用到的,如 @@error代表錯誤的號,@@rowcount代表影響的行數。 

declare

@localtb

table

( id

int) go

--全域性

declare

@@gobal

table

( id

int)

1.表變數是儲存在記憶體中的,當使用者在訪問表變數的時候,sql server是不產生日誌的,而在臨時表中是產生日誌的; 

2.在表變數中,是不允許有非聚集索引的; 

3.表變數是不允許有default預設值,也不允許有約束; 

4.臨時表上的統計資訊是健全而可靠的,但是表變數上的統計資訊是不可靠的; 

5.臨時表中是有鎖的機制,而表變數中就沒有鎖的機制。 

總結:

1使用表變數主要需要考慮的就是應用程式對記憶體的壓力,如果**的執行例項很多,就要特別注意記憶體變數對記憶體的消耗。我們對於較小的資料或者是通過計算出來的推薦使用表變數。如果資料的結果比較大,在**中用於臨時計算,在選取的時候沒有什麼分組的聚合,就可以考慮使用表變數。 

2一般對於大的資料結果,或者因為統計出來的資料為了便於更好的優化,我們就推薦使用臨時表,同時還可以建立索引,由於臨時表是存放在tempdb中,一般預設分配的空間很少,需要對tempdb進行調優,增大其儲存的空間。

SQLSERVER2000中表變數的應用

原語句如下 1 declare ddatetime 2set d getdate 3 select p id from productinfo 4 where p id in 5 28674,28667,28241,355,7210,14646,2164,11891,4519,14671,21788...

SQL Server變數與批處理

變數 用declare宣告乙個或多個變數,用set語句可以把乙個變數設定成指定的值。declare a as varchar 50 set a 1sql server2008新增了對同一語句宣告和賦值變數。declare b as int 10 set語句每次只能對乙個變數進行操作,所以如果要對多個...

QByteArray最好用中間變數儲存臨時變數

最近qt程式設計實踐中,發現qbytearray的不可預料問題,不知道為啥。程式設計實踐是 我用qclipboard儲存自定義結構體資料,實現程序間的資料傳輸。開始我是這麼寫 的 從qclipboard讀取自定義結構體資料的過程是 獲取mimedata指標md 獲取指標md的data域ba,是qby...