摘要: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