2017年10月11日 星期三

活用預設值+有兩種方式替欄位定義預設值

活用預設值
SQL Server允許於欄位定義一個「預設值」(Default),預設值其實就是一個常數值或運算式。

如果未替欄位定義預設值,而且此欄位不允許接受Null值,將會出現錯誤,亦即此一新增資料記錄的動作是失敗的。
所以,對於一個不允許接受Null值的欄位而言,預設值更顯其重要性。

必須注意的是,建立預設值時絕對不能犯兩項錯誤:
1.      預設值的資料型態必須與欄位的資料型態相同
例如,欲以一個常數字串作為charvarchartext…等字元型態欄位的預設值,則必須將常數字串內含在一對引號中。(若預設值為運算式其結果亦應相同資料型態)
2.      欄位的預設值不可與CHECK條件約束或規則相違背
例如,某欄位的CHECK條件約束是存入此欄位中的數值必須大於1000,然而預設值卻設定成1000,則自相矛盾。

有兩種方式替欄位定義預設值:
1.      DEFAULT定義
所謂的DEFAULT定義,也就是預設值可以成為資料表之結構定義的一部分。
意即在制定資料表結構時,可一併定義各個欄位的預設值。(符合ANSI SQL標準)
(1)   欲使用SQL Server Enterprise Manager定義欄位的預設值,可於結構定義畫面的「預設值」文字方塊中鍵入其預設值。
(2)   就程式控制而言,於使用CREATE TABLE命令建立資料表的同時要替某欄位定義預設值,亦或是使用ALTER TABLE命令替資料表新增欄位時要替某一個新增的欄位定義預設值,則可於後加入:
[CONSTRAINT constraint_name]
         DEFAULT constant_expression
      
       如果使用ALTER TABLE命令替某一個現存欄位定義預設值,則可用:
       [CONSTRAINT constraint_name]
         DEFAULT constant_expression FOR column
       語法中的CONSTRAINT constraint_name引數用來指定DEFAULT定義的名稱。
       constant_expression則是作為預設值的常數值或運算式。
       FOR column引數則是指定要套用預設值之欄位名稱。
      
       使用DEFAULT定義時,必須注意:
DEFAULT定義的預設值只有在以INSERT命令新增資料記錄時才會發生效用。
◆每一個欄位最多只能定義一個DEFAULT定義。
       ◆自動編號欄位與timestamp資料型態的欄位不能套用DEFAULT定義。
       ◆如果欄位係採用一個已套用DEFAULT物件的使用者自訂資料型態,則此欄位不能再套用DEFAULT定義。
       DEFAULT定義允許以系統提供的資料值作為預設值,包括:USERCURRENT_USERSESSION_USERSYSTEM_USERCURRENT_TIMESTAMP
      
範例1
若以CREATE TABLE命令敘述建立一個資料表,其中以newid()函數的傳回值作為欄位Id的預設值。
/* 檔案名稱: Demo650.sql */
CREATE TABLE DemoTable25
(
Id uniqueidentifier NOT NULL DEFAULT newid() PRIMARY KEY,
Name varchar(16) NOT NULL,
Phone varchar(11) NOT NULL,
Birthday datetime NOT NULL
)

範例2
承上題,以ALTER TABLE命令替資料表新增擁有預設值欄位(AddressIncome),且替原有的NameBirthdayPhone三個欄位定義預設值:
/* 檔案名稱: Demo651.sql */
ALTER TABLE DemoTable25
  ADD
  Address varchar(60) NOT NULL DEFAULT '台灣省台北市',
  Income money NOT NULL DEFAULT 10000,
  DEFAULT '姓名未知' FOR Name,
  DEFAULT getdate() FOR Birthday,
  DEFAULT '電話未知' FOR Phone

2.      DEFAULT物件
   DEFAULT物件是一個獨立存在的資料庫物件,其只需建立一次,便能夠被同一資料庫中所有資料表的不同欄位所共用。(最大缺陷為不符合ANSI SQL標準)
  1. 使用SQL Server Enterprise Manager建立DEFAULT物件
(1)   於展開之資料庫中選取「預設」項目,按右鍵選取「新增預設」指令。
(2)   於對話方塊中之「名稱」文字方塊鍵入欲自訂DEFAULT物件名稱,在「值」文字方塊鍵入預設值的常數值或運算式,再按「確定」鈕。
(3)   反覆上面步驟,直到建立所需DEFAULT物件為止。
(4)   緊接著是將該DEFAULT物件連結至各欄位或使用者自訂資料型態;於DEFAULT物件按右鍵選取「內容」指令。
(5)   欲連結欄位時按下「繫結資料行」按鈕。
(6)   「繫結預設值到資料行」對話方塊開啟後,從「資料表」清單方塊中選取資料表,將欲連結的欄位一一移至右側的「已繫結的資料行」清單方塊中,最後按「套用」按鈕即完成。
(7)   承上,若欲連結至使用者自訂資料型態,則按下「繫結UDT」按鈕。
(8)   「繫結預設值到使用者自訂的資料型態」對話方塊開啟後,勾選「繫結」核取方塊。


沒有留言:

用頭腦去思考,不要人云亦云才好, 宗教信徒就是依賴與自私心態(求東求西)的人, 光是這點就很容易暴露弱點了, 難怪seafood吃飽飽,哈哈。 續上, 除了依賴與自私心態(兩者都是人性)之外。 另外也有很大一部份的人,是人云亦云的思考邏輯, 所以宗教才能譁眾取寵。