SQL 預設值和規則

2021-10-01 05:31:06 字數 1941 閱讀 8374

建立規則

下面來演示以下兩種完整性約束的操作

由於sql server2008取消了以下兩項操作的圖形介面操作,我們只能用命令建立,配合圖形介面來觀察結果了。

先建立了乙個20歲的年齡的預設值,在我們新增學生不輸入學生年齡的時候,系統自動新增預設值。

可以看到系統自動新增年齡20

我們現在再來看下面的問題,第乙個是預設值物件,注意,不是預設值,而是個物件,注意我們要先建立物件。

在我們沒有用語句建立之前,我們先來觀察一下,可以看到現在還沒有物件的存在,我們建立乙個,預設值物件為「女」的,

create

default

繫結預設值物件

sp_bindefault

解綁預設值物件

sp_unbindefault

刪除預設值物件

drop

default

create

default s***_df as

'女'--建立性別預設值物件

可以看到物件已存在,下面再來看看這個物件改怎麼用,把這個物件關聯或繫結到要用的字段,沒做之前我們觀察下,目前是空的,我們來關聯,關了,再開啟,相當於重新整理一下,

exec sp_bindefault 's***_df'

,'student.s***'

--繫結到性別列

可以看到,剛才建立的預設值物件dbo.s***_df,已經和學生性別列關聯到一起了,用的是物件繫結的方式,關聯的實際上是裡面的具體值「女」,我們再來檢驗一下,是否有作用,新增乙個學生,性別空,看看系統怎麼處理。

注意,已經能看到,系統自動填充了 女 和 20,前者是用物件關聯填充的,後者是直接填充值的,都是預設值的用法。

下面我們來刪除,不要了,可以看到不讓刪除,現在物件處於繫結狀態,也就是在用中,則不讓刪除,我們必須把關聯取消,使之不用了,才能刪除。也就是說要先解綁,再刪除!可以看到解綁後,再刪除,沒問題了。對應解綁再刪除的命令方式,見下面語句

exec sp_unbindefault 'student.s***'

--解綁

drop

default s***_df --刪除物件

以上是預設值及預設值物件的操作,兩者的區別就是乙個是具體值,乙個是具體值的物件封裝,都是預設約束的用法。

下面是另外一種,規則,使用方法和預設值物件的一樣。先建立 規則物件,再繫結,刪除前要先解綁。下面我們來看看規則的操作命令。

create

rule

繫結規則

sp_bindrule

解綁規則

sp_unbindrule

刪除規則

drop

rule

來看個例子,操作前先觀察一下。目前是空的,我們來建個新的

create

rule sno_rule

as@range

like

'2002[0-9][0-9][0-9][0-9][0-9]'

--建立學號規則

@range是個變數名稱,不是具體欄位名,在關聯繫結後則代表具體欄位了,後面的like語句代表2002開頭,後面的5位,每一位都是從0

-9,表示[0-

9],我們來建立物件。

可以看到物件了,下面我們來繫結。來檢驗一下。可以看到規則提示錯誤了,與2002開頭不符,這就是規則約束檢查的作用,可以看到按規則要求則可以新增成功!

exec sp_bindrule 'sno_rule'

,'student.sno'

--繫結到學號列

不要了,刪除前要先解綁!

exec sp_unbindrule 'student.sno'

--解綁

drop

rule sno_rule --刪除物件

刪除成功!

以上兩種約束演示結束!

約束 規則 預設值和觸發器

一 not null 指定不接受 null 值的列。二 check 約束對可以放入列中的值進行限制,以強制執行域的完整性。check 約束指定應用於列中輸入的所有值的布林 取值為 true 或 false 搜尋條件,拒絕所有不取值為 true 的值。可以為每列指定多個 check 約束。下例顯示名為...

SQL修改字段預設值方法

declare tablename varchar 30 declare fieldname varchar 50 declare sql varchar 300 set tablename dncdeta1 set fieldname description set sql select sql ...

如何用Sql更新預設值

你的建表語句 create table ff aa varchar 100 null default 1 go 修改預設值 declare s nvarchar 4000 select s alter table b.name drop constraint d.name 表名 b.name,欄位名...