第7章 建立資料表與完整性限制條件 7-1 資料型別 7-2 資料表的建立 7-3 建立完整性限制條件 7-4 修改與刪除資料表 7-5 建立SQL Server資料庫圖表 7-6 暫存資料表的建立
7-1 資料型別 7-1-1 數字資料型別 7-1-2 日期資料型別 7-1-3 字元與位元串流資料型別 7-1-4 其他資料型別
7-1-1 數字資料型別-位元資料型別 SQL Server數字資料型別是用來儲存數值資料,包含整數和小數。 位元資料型別bit的值可以是0、1或NULL,一個bit資料型別的欄位大小是1位元(Bits),但它會佔用整個位元組(Bytes),除非資料表擁有數個bit資料型別的欄位,才會使用同一個位元組的1~8位元,若超過8個欄位,就使用第2個位元組的9~16位元來儲存。 因為bit資料型別的值可以是1或0,所以特別適合使用在開/關、真/假和true/false等布林資料的欄位,即1為true;0為false。
7-1-1 數字資料型別-整數資料型別 整數資料型別可以儲存整數但沒有小數的數值資料,例如:1、-23、589和8888等正負整數。SQL Server提供數種整數資料型別來儲存不同範圍的整數資料,請依照欄位可能整數值的範圍來決定使用哪一種整數資料型別,如下表所示:
7-1-1 數字資料型別-精確小數資料型別 精確小數資料型別可以儲存包含小數的數值資料,而且可以完全保留指定的精確度(Precision)。SQL Server提供兩種精確小數資料型別,如下表所示:
7-1-1 數字資料型別-浮點數資料型別 浮點數資料型別是遵循IEEE(Institute of Electrical and Electronic Engineers)的資料型別,一樣可以用來儲存擁有小數點的數值資料。此型別也稱為不精確小數資料型別,因為當數值非常大或非常小時,其儲存的資料是一個近似值,例如:1/3的結果就是一個近似值。 SQL Server提供的兩種浮點數資料型別,如下表所示:
7-1-1 數字資料型別-貨幣資料型別 貨幣資料型別並不是ANSI-SQL 92規格的資料型別,SQL Server提供此型別來儲存貨幣資料,以符合實際貨幣輸入格式的千元符號「,」,例如:2,5000元,如下表所示:
7-1-2 日期資料型別 日期資料型別儲存日期與時間資料,如下表:
7-1-3 字元與位元串流資料型別-說明 在電腦系統讀寫的位元串流(Byte Stream)就是一序列的位元組資料。SQL Server可以將位元組資料解碼成字元、數字或符號,即字串和統一字碼字串資料型別的資料。如果不作任何解碼就是二進位字串資料型別。 統一字碼(Unicode)是由Unicode Consortium組織所制定的一個能包括全世界文字的字碼集,它包含GB2312和Big5字碼集的所有字集,即ISO 10646字集。
7-1-3 字元與位元串流資料型別- 字串資料型別 字串資料型別是用來儲存字串資料,例如:'陳會安'、'This is a book.'和'Joe Chen'等。SQL Server提供四種字串資料型別,可以用來儲存固定長度或變動長度的字串,如下表所示:
7-1-3 字元與位元串流資料型別- 統一字碼字串資料型別 統一字碼字串資料型別是用來儲存使用統一字碼為字碼集的字串資料,SQL Server統一字碼字串的資料需要指明「N」開頭的字串,如下所示: N'This is a book.' N'Joe Chen'
7-1-3 字元與位元串流資料型別- 二進位字串資料型別 二進位字串資料型別是用來儲存二進位字串(Binary String)資料,也就是未經解碼的位元串流,可以用來儲存二進位資料的圖檔、Word文件或Excel試算表等,如下表所示:
7-1-4 其他資料型別-說明 在SQL Server除了前述常用的數值、貨幣、日期與時間和字串資料型別外,還提供一些特殊用途的資料型別。 一般來說,除非資料庫應用程式有特殊的需求,通常並不會使用到這些資料型別。
7-1-4 其他資料型別-標記資料型別 標記資料型別可以用來建立記錄資料戳記或識別碼,這些都是資料庫或全域的唯一值。SQL Server提供兩種標記資料型別,如下表所示:
7-1-4 其他資料型別-xml資料型別 資料型別xml是SQL Server 2005新增的資料型別,可以在資料表儲存整份XML文件或XML片斷內容,並且支援XML索引來加速XML資料存取。 基本上,在資料表建立的xml欄位可以分為兩種:強制型態的XML欄位(Typed XML Columns)需要使用XML Schema進行驗證,否則只能建立非強制型態的XML欄位(Un-typed XML Columns),進一步說明請參閱<第20章:SQL Server與XML>。
7-1-4 其他資料型別-sql_variant資料型別 sql_variant資料型別建立的資料表欄位可以儲存text、ntext、image、timestamp、sql_variant、varchar(max)、nvarchar(max)和varbinary(max)資料型別之外所有資料型別的資料,視資料型別的不同,可以儲存最大8016位元的資料。 資料型別sql_variant如同Visual Basic語言的variant資料型別,可以建立儲存各種資料的變數,當我們不確定欄位的資料型別時,就可以使用sql_variant資料型別來儲存數值、日期或字串資料。
7-1-4 其他資料型別-階層資料型別 在SQL Server 2008版新增hierarchyid資料型別,可以在SQL Server資料庫儲存階層資料(Hierarchical Data),這是一種可變長度的系統資料型別,可以使用hierarchyid欄位來代表記錄在階層中的位置。 不過,hierarchyid資料型別的欄位並不會自動產生樹狀目錄的階層架構,應用程式需要自行產生且指定hierarchyid欄位值,以便建立記錄間的關聯性來建立階層資料。因為此型別的使用已經超過本書範圍,其進一步說明請參閱SQL Server線上叢書。
7-1-4 其他資料型別-空間資料型別 SQL Server 2008版新增geometry和geography兩種空間資料型別,geometry資料型別支援儲存平面地球(Flat Earth)的地理資料,符合開放式地理空間協會(Open Geospatial Consortium,OGC)的規格。 資料型別geography可以儲存球形地球(Round Earth)資料,即地理座標的經緯度,例如:儲存GPS的經緯度座標。關於空間資料型別的使用可能需要整本書來說明,所以本書並沒有討論這兩種資料型別。
7-1-4 其他資料型別- T-SQL變數的資料型別 SQL Server提供一些專為T-SQL變數宣告使用的資料型別,這些資料型別並不能用來定義資料表的欄位,如下表所示:
7-2 資料表的建立 7-2-1 使用Management Studio建立資料表 7-2-2 使用T-SQL指令建立資料表 7-2-3 建立計算欄位 7-2-4 疏鬆欄位的使用
7-2-1 使用Management Studio 建立資料表 Management Studio提供圖形編輯畫面來建立資料表的定義資料,例如:在執行Ch7-2.sql建立的【教務系統】資料庫上,建立名為【學生】資料表,如下圖所示:
7-2-2 使用T-SQL指令建立資料表-語法 T-SQL語言是使用CREATE TABLE指令在目前選擇的資料庫建立資料表,其基本語法如下所示: CREATE TABLE 資料表名稱 ( 欄位名稱1 資料型別 [ 欄位屬性清單 ], 欄位名稱2 資料型別 [ 欄位屬性清單 ], ………. 欄位名稱n 資料型別 [ 欄位屬性清單 ] [ 資料表屬性清單 ] ) [ ON 檔案群組名稱 ] [ TEXTIMAGE_ON 檔案群組名稱 ]
7-2-2 使用T-SQL指令建立資料表-範例1 SQL指令碼檔:Ch7-2-2-01.sql 在【教務系統】資料庫新增【員工】資料表,因為沒有ON子句,所以是建立在預設檔案群組,如下所示: CREATE TABLE 員工 ( 身份證字號 char(10) NOT NULL PRIMARY KEY, 姓名 varchar(12) NOT NULL, 城市 varchar(5) DEFAULT '台北', 街道 varchar(30), 電話 char(12), 薪水 money, 保險 money, 扣稅 money )
7-2-2 使用T-SQL指令建立資料表-範例2 SQL指令碼檔:Ch7-2-2-02.sql 在【教務系統】資料庫新增【課程】資料表,這是建立在名為【教務系統_群組】檔案群組的資料表,如下所示: CREATE TABLE 課程 ( 課程編號 char(5) NOT NULL PRIMARY KEY , 名稱 varchar(30) NOT NULL , 學分 int DEFAULT 3 ) ON 教務系統_群組
7-2-2 使用T-SQL指令建立資料表-範例3 SQL指令碼檔:Ch7-2-2-03.sql 在【教務系統】資料庫新增【教授】資料表,且新增自動編號的【建檔編號】欄位,如下所示: CREATE TABLE 教授 ( 建檔編號 int IDENTITY(1000, 1), 教授編號 char(4) NOT NULL PRIMARY KEY, 職稱 varchar(10), 科系 varchar(5), 身份證字號 char(10) NOT NULL )
7-2-3 建立計算欄位-說明 計算欄位(Computed Columns)是一種沒有儲存值的資料表欄位,它的值是使用同一筆記錄其他欄位建立的運算式計算而得。因為欄位並沒有真正儲存資料,其欄位值是從其他欄位計算出,所以計算欄位就是一種虛擬欄位。 請注意!計算欄位因為並沒有存入值,所以並不能指定DEFAULT、NOT NULL、NULL等欄位屬性和條件約束。如果計算欄位值是唯一值且不會更動,我們仍然可以指定成PRIMARY KEY和UNIQUE欄位,不過很少會如此設定。
7-2-3 建立計算欄位-建立方式 在Management Studio新增計算欄位就是在編輯畫面下方指定【計算資料行規格/公式】的欄位屬性。 T-SQL指令是使用AS關鍵字來指定計算欄位的運算式。
7-2-3 建立計算欄位-範例 SQL指令碼檔:Ch7-2-3.sql 在【教務系統】資料庫新增【估價單】資料表,最後的【平均單價】欄位是一個計算欄位,其運算式為【總價 / 數量】,如下所示: CREATE TABLE 估價單 ( 估價單編號 int NOT NULL IDENTITY PRIMARY KEY, 產品編號 char(4) NOT NULL, 總價 decimal(5, 1) NOT NULL, 數量 int NOT NULL DEFAULT 1, 平均單價 AS 總價 / 數量 )
7-2-4 疏鬆欄位的使用-說明 疏鬆欄位(Sparse Columns)是指在資料表中此欄位資料大部分是NULL值,換句話說,整個資料表只有少部分記錄的欄位擁有值,因為NULL值根本不需佔用儲存空間,換句話說,疏鬆欄位只有非NULL值才會佔用儲存空間。
7-2-4 疏鬆欄位的使用-注意事項 疏鬆欄位在資料表設計上的注意事項,如下所示: 疏鬆欄位必須大部分記錄的欄位值為NULL值。 疏鬆欄位不能指定DEFAULT或新增任何規則,也不能使用IDENTITY和ROWGUIDCOL屬性。 疏鬆欄位可以使用在任何資料型別的欄位,除了geography、geometry、text、ntext、image、timestamp和使用者自訂型別等資料型別。 疏鬆欄位不能作為主鍵欄位,也不可以用來建立叢集索引。
7-2-4 疏鬆欄位的使用-建立方式 在Management Studio新增疏鬆欄位就是在編輯畫面下方的【為疏鬆】欄位,將屬性值改為【是】。 T-SQL指令是使用SPARSE關鍵字來指定欄位為疏鬆欄位。
7-2-4 疏鬆欄位的使用-範例 SQL指令碼檔:Ch7-2-4.sql 在【教務系統】資料庫新增【廠商】資料表,最後的【分公司數】欄位是一個疏鬆欄位,因為大部分廠商都沒有分公司,如下所示: CREATE TABLE 廠商 ( 廠商編號 int NOT NULL IDENTITY PRIMARY KEY, 廠商名稱 varchar(100), 分公司數 int SPARSE )
練習題 寫出圖中學生關聯表的T-SQL,其中學號是主鍵,以自動編號方式,起始值9800001,遞增值1
7-3 建立完整性限制條件 7-3-1 條件約束的基礎 7-3-2 建立PRIMARY KEY條件約束 7-3-3 建立CHECK條件約束 7-3-4 建立資料表的關聯性
7-3-1 條件約束的基礎-說明 條件約束(Constraints)可以定義欄位的檢查規則,檢查輸入資料是否允許存入資料表欄位。換句話說,它就是在建立資料庫的完整性限制條件,來維護資料的完整性。 SQL Server的條件約束可以分為針對單一欄位值的「欄位層級條件約束」(Column-level Constraints)和多個欄位值的「資料表層級條件約束」(Table-level Constraints)。
7-3-1 條件約束的基礎-種類
7-3-2 建立PRIMARY KEY條件約束-說明
7-3-2 建立PRIMARY KEY條件約束- 使用Management Studio 如果主鍵是多個欄位的複合鍵,在Management Studio選取欄位時,請使用Ctrl鍵配合選取多個欄位後,再設定主索引鍵。
7-3-2 建立PRIMARY KEY條件約束- 使用T-SQL(語法) 在T-SQL的CREATE TABLE指令可以指定資料表層級的PRIMARY KEY條件約束,其語法如下所示: [ CONSTRAINT 條件約束名稱 ] PRIMARY KEY (欄位清單) 上述語法建立名為【條件約束名稱】的條件約束,如果沒有指定名稱,SQL Server會自動產生條件約束名稱,在括號內的欄位清單如果為多欄位的複合鍵,請使用逗號分隔欄位名稱。
7-3-2 建立PRIMARY KEY條件約束- 使用T-SQL(範例) SQL指令碼檔:Ch7-3-2.sql 在【教務系統】資料庫新增【訂單明細】資料表,其主鍵是【訂單編號】和【項目序號】欄位的複合鍵,如下所示: CREATE TABLE 訂單明細 ( 訂單編號 int NOT NULL, 項目序號 smallint NOT NULL, 數量 int DEFAULT 1, PRIMARY KEY (訂單編號, 項目序號) )
7-3-3 建立CHECK條件約束-說明 CHECK條件約束能夠限制欄位值是否在指定的範圍,其內容是條件運算式,運算結果如為true,就允許存入欄位資料,否則並不允許存入。 例如:在【員工】資料表的【扣稅】欄位值,一定小於【薪水】欄位值,即【薪水 > 扣稅】條件運算式。
7-3-3 建立CHECK條件約束- 使用Management Studio 在Management Studio工具建立CHECK條件約束(正確的說是修改資料表新增CHECK條件約束)。
7-3-3 建立CHECK條件約束- 使用T-SQL(語法) 在T-SQL的CREATE TABLE指令也可以建立CHECK條件約束,欄位層級是位在欄位屬性清單,其建立的約束條件只對此欄位有效;至於資料表層級是位在資料表屬性清單,其條件對整個資料表都有效。其基本語法如下所示: [ CONSTRAINT 條件約束名稱 ] CHECK (條件運算式) 上述語法在CHECK條件約束的括號內是條件運算式,如果沒有指定條件約束名稱,SQL Server會自動新增其名稱。
7-3-3 建立CHECK條件約束- 使用T-SQL(範例1) SQL指令碼檔:Ch7-3-3-01.sql 在【教務系統】資料庫新增【訂單】資料表,並且在【訂單總價】和【付款總額】欄位建立欄位層級的CHECK條件約束,如下所示: CREATE TABLE 訂單 ( 訂單編號 int NOT NULL IDENTITY PRIMARY KEY, 訂單總價 money NOT NULL CONSTRAINT 訂單總價_條件約束 CHECK (訂單總價 > 0), 付款總額 money DEFAULT 0 CHECK (付款總額 > 0) )
7-3-3 建立CHECK條件約束- 使用T-SQL(範例2) SQL指令碼檔:Ch7-3-3-02.sql 在【教務系統】資料庫新增【我的訂單】資料表,並且建立資料表層級的CHECK條件約束,如下所示: CREATE TABLE 我的訂單 ( 訂單編號 int NOT NULL IDENTITY PRIMARY KEY, 訂單總價 money NOT NULL, 付款總額 money DEFAULT 0, CHECK ( (訂單總價 > 0) AND (付款總額 > 0) AND (訂單總價 > 付款總額)) )
練習 check條件 1.欄位層級的條件約束: 在【教務系統】資料庫,建立[學生]資料表,各欄位如下(不用索引),其中[學號]欄位要建立名為[學年]的條件約束名稱,條件: 學號>9800001 2.資料表層級的條件約束: 在【教務系統】資料庫,建立[結果]資料表,各欄位如圖,其中[成績]欄位的條件: 成績>=60 (兩種寫法分開寫在同一個檔案就可以)
7-3-4 建立資料表的關聯性-說明 資料表的關聯性(Relationships)是二個或多個資料表間所擁有的關係。 在資料表間建立關聯性(Relationships)的目的是建立參考完整性(Referential Integrity),它是資料表與資料表間的完整性限制條件。
7-3-4 建立資料表的關聯性-種類 一對一的關聯性(1:1):指一個資料表記錄只關聯到另一個資料表記錄,這是指資料表一筆記錄的欄位值可以被其他資料表一筆記錄的欄位值所參考。 一對多的關聯性(1:N):指一個資料表記錄關聯到多個資料表記錄,這是指資料表一筆記錄的欄位值可以被其他資料表多筆記錄的欄位值所參考。 多對多的關聯性(M:N):指多個資料表記錄關聯到多個資料表記錄,這是指資料表多筆記錄的欄位值可以被其他資料表多筆記錄的欄位值所參考。
7-3-4 建立資料表的關聯性- 使用Management Studio
7-3-4 建立資料表的關聯性- 使用T-SQL(語法) 使用T-SQL指令建立關聯性就是新增FOREIGN KEY條件約束,在CREATE TABLE指令的條件約束語法中,欄位層級是位在欄位屬性清單;資料表層級位在資料表屬性清單,其基本語法如下所示: [CONSTRAINT 條件約束名稱] [ [FOREIGN KEY (欄位清單) ] REFERENCES 參考資料表名稱 (欄位清單) [ON DELETE { CASCADE | NO ACTION }] [ON UPDATE { CASCADE | NO ACTION }] ]
7-3-4 建立資料表的關聯性- 使用T-SQL(範例1) SQL指令碼檔:Ch7-3-4.sql 在【教務系統】資料庫建立【班級】資料表,並且使用FOREIGN KEY條件約束,建立與【學生】、【課程】和【教授】資料表的關聯性,如下所示: CREATE TABLE 班級 ( 教授編號 char(4) NOT NULL, 課程編號 char(5) NOT NULL, 學號 char(4) NOT NULL REFERENCES 學生 (學號), 上課時間 datetime,
7-3-4 建立資料表的關聯性- 使用T-SQL(範例1) 教室 varchar(8), PRIMARY KEY (學號, 教授編號, 課程編號), FOREIGN KEY (教授編號) REFERENCES 教授 (教授編號), FOREIGN KEY (課程編號) REFERENCES 課程 (課程編號) )
練習題 寫出建立圖中關聯表-結果的T-SQL語法,其中學號是欄位層級方式,參考自學生關聯表的學號,測驗編號是資料表層級的方式,參考自測驗關聯表的測驗編號
7-4 修改與刪除資料表 7-4-1 修改資料表名稱 7-4-2 修改資料表欄位 7-4-3 修改條件約束 7-4-4 刪除資料表
7-4-1 修改資料表名稱- 使用Management Studio
7-4-1 修改資料表名稱- 使用系統預存程序(語法) 在SQL Server可以使用sp_rename系統預存程序來修改資料庫物件的名稱,包含資料庫、資料表、欄位和預存程序等,其基本語法如下所示: EXEC sp_rename '物件名稱', '新名稱' [,'物件型態' ] 上述系統預存程序的參數物件型態可以指定是修改資料庫(DATABASE)、欄位(COLUMN)和索引(INDEX),括號中的型態值,如果沒有指定,就可以修改資料表名稱。
7-4-1 修改資料表名稱- 使用系統預存程序(範例) SQL指令碼檔:Ch7-4-1.sql 修改【教務系統】資料庫的【訂單】資料表名稱成為【學校訂單】,如下所示: EXEC sp_rename '訂單', '學校訂單'
7-4-2 修改資料表欄位- 使用Management Studio
7-4-2 修改資料表欄位-使用T-SQL(語法) T-SQL指令修改資料表欄位來使用ALTER TABLE指令,其基本語法如下所示: ALTER TABLE 資料表名稱 ADD 新欄位名稱 資料型別 [欄位屬性清單] | 計算欄位名稱 AS 運算式 [,] 或 DROP COLUMN 欄位名稱 ALTER COLUMN 欄位名稱 新資料型別 [NULL | NOT NULL]
7-4-2 修改資料表欄位-使用T-SQL(範例1) SQL指令碼檔:Ch7-4-2-01.sql 在【教務系統】資料庫修改【我的訂單】資料表,新增【訂單日期】和【送貨日期】欄位,資料型別都是datetime,如下所示: ALTER TABLE 我的訂單 ADD 訂單日期 datetime NOT NULL, 送貨日期 datetime
7-4-2 修改資料表欄位-使用T-SQL(範例2) SQL指令碼檔:Ch7-4-2-02.sql 在【教務系統】資料庫修改【我的訂單】資料表,刪除【送貨日期】欄位,如下所示: ALTER TABLE 我的訂單 DROP COLUMN 送貨日期
7-4-2 修改資料表欄位-使用T-SQL(範例3) SQL指令碼檔:Ch7-4-2-03.sql 在【教務系統】資料庫修改【我的訂單】資料表,將【訂單日期】欄位的資料型別改為varchar(20),如下所示: ALTER TABLE 我的訂單 ALTER COLUMN 訂單日期 varchar(20) NOT NULL
練習題 利用T-SQL,在學生關聯表,新增欄位[地址],資料型別是varchar(50);刪除[生日欄位]:將[電話]欄位的資料型別改為char(10)
7-4-3 修改條件約束- 使用Management Studio 在Management Studio只需開啟資料表欄位定義編輯視窗,就可以開啟「檢查條件約束」對話方塊來修改CHECK條件約束。開啟「外部索引鍵關聯性」對話方塊,可以修改資料表的關聯性。 除了在Management Studio按上方工具列按鈕來開啟上述兩個對話方塊外,在欄位定義上,執行【右】鍵快顯功能表的【關聯性】和【檢查條件約束】指令,也一樣可以開啟所需的對話方塊。
7-4-3 修改條件約束-使用T-SQL(語法) T-SQL是使用ALTER TABLE指令修改條件約束,其基本語法如下所示: ALTER TABLE 資料表名稱 [ WITH CHECK | WITH NOCHECK] ADD CONSTRAINT條件約束定義 或 DROP CONSTRAINT 條件約束名稱
7-4-3 修改條件約束-使用T-SQL(範例1) SQL指令碼檔:Ch7-4-3-01.sql 在【教務系統】資料庫修改【員工】資料表,新增【薪水】欄位的CHECK條件約束,條件運算式為【薪水 > 18000】,如下所示: ALTER TABLE 員工 ADD CONSTRAINT 薪水_條件 CHECK (薪水 > 18000)
7-4-3 修改條件約束-使用T-SQL(範例2) SQL指令碼檔:Ch7-4-3-02.sql 在【教務系統】資料庫修改【員工】資料表,刪除名為【薪水_條件】的條件約束,如下所示: ALTER TABLE 員工 DROP CONSTRAINT 薪水_條件
練習題 在【教務系統】資料庫修改【學生】資料表,新增【學號】欄位的CHECK條件約束,條件運算式為【學號 > 9800001】;刪除名為[電話區域]的條件約束
7-4-4 刪除資料表- 使用Management Studio
7-4-4 刪除資料表-使用T-SQL(語法) 使用T-SQL的DROP TABLE 指令來刪除資料表,刪除範圍包含資料表索引、記錄和檢視表,其基本語法如下所示: DROP TABLE 資料表名稱 上述語法是從資料庫刪除【資料表名稱】的資料表。
7-4-4 刪除資料表-使用T-SQL(範例) SQL指令碼檔:Ch7-4-4.sql 在【教務系統】資料表刪除【我的訂單】資料表,如下所示: DROP TABLE 我的訂單
7-5 建立SQL Server資料庫圖表-說明 Management Studio提供資料庫圖表功能,可以使用符號圖形來顯示資料庫的資料表內容與其關聯性。不只如此,資料庫圖表一樣提供編輯功能,可以直接在資料庫圖表的編輯畫面新增資料表、建立關聯性和條件約束。
7-5 建立SQL Server資料庫圖表-圖例
7-6 暫存資料表的建立-說明 暫存資料表(Temporary Tables)是一種因需求而暫時用來儲存資料所建立的資料表,它只有在使用者的工作階段(Session)存在,即使用者在線上時存在,當使用者離線後,SQL Server就自動刪除此暫存資料表。 SQL Server暫存資料表是儲存在tempdb系統資料庫。
7-6 暫存資料表的建立-種類 區域暫存資料表(Local Temporary Tables):這是名稱使用「#」開頭的資料表,只有在使用者目前工作階段的期間有效,當工作階段終止,即使用者離線後,SQL Server就會自動刪除此資料表。 全域暫存資料表(Global Temporary Tables):這是名稱使用「##」開頭的資料表,所有使用者的工作階段都可以存取此資料表,直到最後一位使用者的工作階段終止,即離線後,才會自動刪除此資料表。
7-6 暫存資料表的建立-範例1 SQL指令碼檔:Ch7-6-01.sql 在SQL Server新增名為【#課程】資料表,這是一個區域暫存資料表,如下所示: CREATE TABLE #課程 ( 課程編號 char(5) , 名稱 varchar(30) , 學分 int )
7-6 暫存資料表的建立-範例2 SQL指令碼檔:Ch7-6-02.sql 在SQL Server新增名為【##教授】資料表,這是一個全域暫存資料表,如下所示: CREATE TABLE ##教授 ( 教授編號 char(4), 職稱 varchar(10), 科系 varchar(5), )
End