免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
表變量 和臨時表簡介
本文導讀:定義一個sql server表變量的方法和定義一個用戶自定義表的方法是一樣的;然而,定義了一個表變量之后,你就不能再改變該表的定義了。而且你必須在定義這個表變量的時候給出它所有屬性的定義.
定義一個sql server表格變量的方法和定義一個用戶自定義表格的方法是一樣的;例如
1.
DECLARE @T_ChartsIdeaItem1 Table(XData char(20) null,YData char(20) null)

INSERT INTO @T_ChartsIdeaItem1(XData,YData)VALUES ('BU9876', 'Creating')

select * from @T_ChartsIdeaItem1

2.
DECLARE@News table
(
News_id int NOT NULL,
NewsTitle varchar(100),
NewsContent varchar(2000),
NewsDateTime datetime
)
INSERT INTO @News (News_id, NewsTitle, NewsContent,NewsDateTime)
VALUES (1,'BlueGreen', 'Austen', 200801, GETDATE())
SELECT News_id, NewsTitle, NewsContent,NewsDateTime FROM @News

不是所有的INSERT命令都可以對表格變量執(zhí)行操作。比如,當你向一個表格變量插入變量值時,你就不能用EXEC命令。通過執(zhí)行一個已保存的程序或是一系列命令來為一個表格變量插入變量值將會返回錯誤的結果。而且,也不是所有的SELECT命令都可以對表格變量執(zhí)行操作,你不能用SELECT INTO命令來為一個表格變量插入數(shù)據。
對于sql server表格變量,你不能使用某些系統(tǒng)程序,比如sp_depends。運行時產生的并被隨機命名的表格變量的對象名被存儲在tempdb數(shù)據庫中。由于大多數(shù)系統(tǒng)功能和系統(tǒng)程序需要對象名和標識代碼,所以對一個表格變量執(zhí)行系統(tǒng)功能和系統(tǒng)程序就是一件很困難的事。為了對一個表格變量執(zhí)行系統(tǒng)功能和系統(tǒng)程序,我們需要先進行一些復雜的調整以獲取該表格變量的對象名和/或標識代碼。
一個表格變量的有效范圍就是整個批處理,程序,或函數(shù)的處理過程。當在一段程序中發(fā)出GO命令時,表格變量就不再起作用了。
1. 為什么要使用表變量
表變量是從2000開始引入的,微軟認為與本地臨時表相比,表變量具有如下優(yōu)點:
 a.與其他變量的定義一樣,表變量具有良好的定義范圍,并會被自動清除;
 b.在存儲過程中使用表變量會減少存儲過程重新編譯的發(fā)生;
 c.表變量需要更少的鎖請求和日志資源;
 d.可以在表變量上使用UDF,UDDT,XML。
 
2、表變量的限制
與臨時表相比,表變量存在著如下缺點:
 a.在表變量上沒有統(tǒng)計信息,查詢優(yōu)化器根據固定的預估值來選擇執(zhí)行計劃,在數(shù)據很多的情況下,會導致查詢優(yōu)化器選擇很差的執(zhí)行計劃;
 b.不能直接在表變量上創(chuàng)建索引,但可以通過創(chuàng)建約束(主鍵、唯一)來建立索引;
 c.在DECLARE后,不能再對表變量進行更改;
 d.不能對表變量執(zhí)行INSERT EXEC,SELECT INTO語句;
 e.不能通過EXEC或sp_executesql來執(zhí)行牽涉到表變量的動態(tài)SQL語句,但如果表變量是在動態(tài)SQL語句內定義的,則可以。
 
3、那什么時候可以使用表變量
要使用表變量應該根據如下規(guī)則來判斷:
 a.表的行數(shù);
 b.使用表變量能夠減少的重新編譯次數(shù);
 c.查詢的類型和對索引或者統(tǒng)計信息的依賴程度;
 d.需要生用UDF,UDDT,XML的時候。
其實也就說,得從實際出發(fā),根據具體的查詢,作出具體的選擇。但是,其中很關鍵的一點,如果表的行數(shù)非常多,使用表變量其實是更費資源的。有人提出了這樣的建議:對于行數(shù)較少的情況下(小于1000行)可以使用表變量;如果行數(shù)很多(有幾萬行),則使用臨時表。
 
4、使用表變量的誤區(qū)
對于表變量,很多人認為,表變量和其他變量一樣,只存在內存中,其實這是不正確的,表變量也存在tempdb中。

臨時表
代碼示例:
CREATETABLE dbo.#News
(
News_id int NOT NULL,
NewsTitle varchar(100),
NewsContent varchar(2000),
NewsDateTime datetime
)
INSERT INTO dbo.#News (News_id, NewsTitle,NewsContent, NewsDateTime)
VALUES (1,'BlueGreen', 'Austen', 200801, GETDATE())
SELECT News_id, NewsTitle, NewsContent,NewsDateTime FROM dbo.#News
DROP TABLE dbo.[#News]

比較臨時表及表變量都可以通過SQL的選擇、插入、更新及刪除語句,它們的的不同主要體現(xiàn)在以下這些:

1)當用戶在訪問表變量時,SQLServer是不產生日志的,而在臨時表中是產生日志的;
2)在表變量中,是不允許有非聚集索引的;
3)表變量是不允許有DEFAULT默認值,也不允許有約束;
4)臨時表上的統(tǒng)計信息是健全而可靠的,但是表變量上的統(tǒng)計信息是不可靠的;
5)臨時表中是有鎖的機制,而表變量中就沒有鎖的機制。

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
SQL Server中臨時表與表變量的區(qū)別 - NiuJinMing - JavaEye技...
數(shù)據庫多條件自定義查詢
php smarty 入門教程[zz] - 締客論壇
VFP組合框動態(tài)數(shù)據綁定實例之查找定位控件設計
復制鏈表的方法
sql 局部表變量
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服