sql server 中的變數表與臨時表
1.臨時表
臨時表和永久表類似,很多永久表具有的功能特性,臨時表都具有,臨時表它的建立是在tempdb中,它只有在乙個資料庫連線結束後或者由sql命名drop掉,才消失,否則他會一直存在,臨時表的建立的時候會產生sql server 系統日誌,
臨時表分為兩種:
一.以#開頭的本地臨時表,特點:只有在本地當前使用者連線中才是可見的,當使用者從例項中斷開連線後自動被刪除,
二.以##開頭的全域性臨時表,特點:建立後,任何使用者都可見,當所有使用者斷開連線後,被刪除。
--本地臨時表的建立
create
table
#localtable
( id
int)
--全域性臨時表
create
table
##gobal(
id int
)
特別注意,儲存過程中的臨時表,在儲存過程結束後,就會被自動刪除(若果是巢狀在游標中的話,就不會刪除)
createproc
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...