創(chuàng)建稱為
CREATE DEFAULT default
AS constant_expression
default
默認(rèn)值的名稱。默認(rèn)值名稱必須符合標(biāo)識(shí)符的規(guī)則。可以選擇是否指定默認(rèn)值所有者名稱。
constant_expression
只包含常量值的表達(dá)式(不能包含任何列或其它數(shù)據(jù)庫對(duì)象的名稱)。可以使用任何常量、內(nèi)置函數(shù)或數(shù)學(xué)表達(dá)式。字符和日期常量用單引號(hào) (') 引起來;貨幣、整數(shù)和浮點(diǎn)常量不需要使用引號(hào)。二進(jìn)制數(shù)據(jù)必須以 0x 開頭,貨幣數(shù)據(jù)必須以美元符號(hào) ($) 開頭。默認(rèn)值必須與列數(shù)據(jù)類型兼容。
只能在當(dāng)前數(shù)據(jù)庫中創(chuàng)建默認(rèn)值的名稱。在數(shù)據(jù)庫中,每個(gè)所有者的各默認(rèn)值名稱必須是唯一的。創(chuàng)建默認(rèn)值后,使用 sp_bindefault 將其綁定到列或用戶定義數(shù)據(jù)類型。
如果默認(rèn)值和其綁定到的列不兼容,則在嘗試插入默認(rèn)值時(shí),Microsoft® SQL Server™ 會(huì)生成錯(cuò)誤信息。例如,N/A 不能用作 numeric 列的默認(rèn)值。
如果默認(rèn)值對(duì)于它所綁定的列而言太長(zhǎng),該值就會(huì)被截?cái)唷?/P>
在單個(gè)批處理中,CREATE DEFAULT 語句不能與其它 Transact-SQL 語句組合使用。
在以相同的名稱創(chuàng)建新的默認(rèn)值之前,必須除去原有的默認(rèn)值,在除去前,必須通過執(zhí)行 sp_unbindefault 來取消對(duì)該默認(rèn)值的綁定。
如果列同時(shí)有默認(rèn)值和規(guī)則與之關(guān)聯(lián),則默認(rèn)值不能違反規(guī)則。與規(guī)則沖突的默認(rèn)值將永遠(yuǎn)不能插入列,每次試圖插入這樣的默認(rèn)值時(shí),SQL Server 都會(huì)生成錯(cuò)誤信息。
當(dāng)綁定到列以后,在以下情況下將插入默認(rèn)值:
如果在創(chuàng)建列時(shí)指定 NOT NULL 并且沒有為其創(chuàng)建默認(rèn)值,則當(dāng)用戶未能為該列輸入項(xiàng)時(shí),就會(huì)生成錯(cuò)誤信息。下表說明默認(rèn)值的存在性與將列定義為 NULL 或 NOT NULL 之間的關(guān)系。表中的條目顯示了結(jié)果。
列定義 | 沒有輸入項(xiàng), 沒有默認(rèn)值 | 沒有輸入項(xiàng),有默認(rèn)值 | 輸入 NULL, 沒有默認(rèn)值 | 輸入 NULL,有默認(rèn)值 |
---|---|---|---|---|
NULL | NULL | default | NULL | NULL |
NOT NULL | Error | default | error | error |
說明 SQL Server 是將空字符串解釋為單個(gè)空格還是解釋為真正的空字符串,由 sp_dbcmptlevel 的設(shè)置控制。如果兼容級(jí)別小于或等于 65,SQL Server 就將空字符串解釋為單個(gè)空格。如果兼容級(jí)別等于 70,則 SQL Server 將空字符串解釋為空字符串。有關(guān)更多信息,請(qǐng)參見 sp_dbcmptlevel。
若要重命名默認(rèn)值,請(qǐng)使用 sp_rename。若要獲得默認(rèn)值的報(bào)表,請(qǐng)使用 sp_help。
CREATE DEFAULT 的權(quán)限默認(rèn)授予 sysadmin 固定服務(wù)器角色成員和 db_owner 和 db_ddladmin 固定數(shù)據(jù)庫角色成員。sysadmin、db_owner 和 db_securityadmin 角色的成員可以將權(quán)限轉(zhuǎn)讓給其他用戶。
下面的示例創(chuàng)建字符默認(rèn)值 unknown。
USE pubs
GO
CREATE DEFAULT phonedflt AS 'unknown'
下面的示例綁定示例 A 中創(chuàng)建的默認(rèn)值。只有當(dāng) authors 表的 phone 列沒有輸入項(xiàng)時(shí),該默認(rèn)值才起作用。請(qǐng)注意,沒有輸入項(xiàng)和顯式指定空值不同。
因?yàn)槊麨?phonedflt 的默認(rèn)值不存在,所以下列 Transact-SQL 語句將失敗。本例只用于演示。
USE pubs相關(guān)文章
GO
sp_bindefault phonedflt, 'authors.phone'