SQL - 在 INSERT INTO 中,使用 default

摘要:SQL - 在 INSERT INTO 中,使用 default

前一陣子,有位朋友問了大家一個問題...

朋友:「請問一下,我對 MS SQL 資料表的某一個欄位設定了預設值,那我若新增一筆資料,且那個欄位我給它 NULL,那欄位會是預設值!? 還是NULL值!?」

當下大家都各有想法,但最後的結論就是,就實際執行一遍就好了啊...

我淡淡的說了一句:「今天你是用 T-SQL 新增資料的話,那個欄位的值就是NULL,若你在UI畫面上,對那個資料表選開啟資料表後,在資料表裡新增資料,那麼那個欄位一開始就是預設值...」

果不其然,如小弟所說的實現了,但那個當下似乎忘了補問一句...

「請問那個欄位的型態時甚麼呢!?」

為什麼這樣問呢!? 很簡單,因為那個欄位的型別是數值的話
1.給NULL值,這多奇怪,且不怎麼順眼,在下語法時,還要特別小心
2.給  0 就更怪了,若當初預設值是大於 0 呢!? DBA看到不就當場嘔血數升...

所以在對擁有預設值欄位的資料表做新增時,建議使用 default 這個關鍵字,以下就來新增三筆資料看看

步驟一:先新增資料表

T-SQL:

CREATE TABLE [dbo].[業務員業績](
 [UID] [uniqueidentifier] NOT NULL,
 [業務員] [nvarchar](50) NOT NULL,
 [銷售業績] [money] NULL CONSTRAINT [DF_業務員業績_銷售業績]  DEFAULT ((10)),
 CONSTRAINT [PK_業務員業績] PRIMARY KEY CLUSTERED
(
 [UID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]


步驟二:對 dbo.業務員業績 新增三筆資料

T-SQL:

 

INSERT INTO dbo.業務員業績 VALUES(newid(), '張小呆', NULL);

INSERT INTO dbo.業務員業績 VALUES(newid(), '張小呆', 0);

INSERT INTO dbo.業務員業績 VALUES(newid(), '張小呆', default);

結果:


其實這都是一種習慣,習慣對欄位設定預設值,但往往都隨心所欲的任意給值;在不然就是,不給預設值了,反正都隨心所欲了,習慣就好了。

還是建議給個規範,這樣才好管理...


補充:

在上面的圖片中的結果不是那麼好,所以可以用下面的語法,來把 0 與 NULL 的資料更新為 default

T-SQL:

UPDATE dbo.業務員業績
SET 銷售業績 = default
WHERE 銷售業績 IS NULL OR 銷售業績 <= 0