sqlserver 臨時表 Vs 表變量 詳細介紹建站知識
導讀:1建站知識說臨時表和表變量,這是一個古老的話題,我們在網上也找到很多的資料闡述兩者的特征,優點與缺點網站建設哪家好seo網站排名優化軟件。
這里我們在SQL Server 2005\SQL Server 2008版本上通過舉例子,說明臨時表和表變量兩者的一些特征,讓我們對臨時表和表變量有進一步的認識。在本章中,我們將從下面幾個方面去進行描述,對其中的一些特征舉例子說明:
約束(Constraint) 索引(Index) I/0開銷 作用域(scope) 存儲位置 其他
例子描述
約束(Constraint)
&nb網站seo優化課程sp; 在臨時表和表變量,都可以創建Constraint。針對表變量,只有定義時能加Constraint。
e.g.在Microsoft SQL Server Management Studio(MSSMS)查詢中,創建臨時表并建Constraint場景,<腳本S1.>
#1( ID (ID))CK_#1_Nr )Go
< 腳本S1.>中,可以看出在臨時表#1的創建時,創建Constraint如“Constraint PK_#1_ID Primary Key(ID)”,也可以在創建臨時表#1后創建Constraint,如“Alter Table #1 Add Constraint CK_#1_Nr Check(Nr Between '10001' And'19999')”,下面我們來看表變量的場景,在定義表變量時不能指定Constraint名,定義表變量后不能對表變量創建Constraint。
e.g. 在定義表變量時不能指定Constraint名<代碼S2.>
(ID))
在<代碼S2.>和<代碼S3.>中可以發現,在解析T-SQL語法過程就發生錯誤,也就是SQL Server不支持定義表變量時對Constraint命名,也不支持定義表變量后,對其建Constraint。
這里慎重提示下,在<代碼S1.>給臨時表建Constraint的時候,特別是在并發場景中,不要指定具體seo網站優化的Constraint名稱,不然會發生對象已存在的錯誤提示。
e.g. 在MSSMS中我們先執行之前<代碼S1.>的創建臨時表#1,不關閉當前會話的情況下,另建一個查詢,執行與<代碼S1.>相同的代碼,如圖
在系統視圖sys.objects,發現“PK_#1_ID”名稱后面不加如何的隨機數值表述不同會話有不同的對象。根據SQL Server對sys.objects的描述規則,sys.objects中的Name列數據是唯一的。當另一個會話創建相同的對象時就會發生對象重復的錯誤。
在Constraint中,Foreign Key是不能應用與表變量,對于臨時表,創建Foreign Key是沒有意義的。也就是說臨時表不受Foreign Key約束。下面我們通過例子來說明臨時表的情況,
e.g.< 腳本S4.>
#1( ID (ID))CK_#1_Nr ), ForeignID ,foreign Key(ForeignID) References #1(ID))Go
右邊的查詢,只看到在sys.tables表哦中存在剛才創建的臨時表#1和#2,在sys.foreign_keys看不到有關Foreign Key約束信息。這也驗證了左邊SQL Server提示的,在臨時表中無法強制使用Foreign Key約束。
聲明: 本文由我的SEOUC技術文章主頁發布于:2023-05-21 ,文章sqlserver 臨時表 Vs 表變量 詳細介紹建站知識主要講述詳細介紹,變量,sqlserver 臨時表 Vs 表變量 詳網站建設源碼以及服務器配置搭建相關技術文章。轉載請保留鏈接: http://www.bifwcx.com/article/web_3855.html