嗯,我已經學會了一些有趣的東西,並可能對你有用。
我已經知道,這是可以插入所有默認值的一排這樣的:
INSERT INTO dbo.DefTest DEFAULT VALUES;
你的問題讓我不知道是否有以更新值設置爲缺省值類似的方式。所以我嘗試了這個實驗:
CREATE TABLE dbo.DefTest (
Id int NULL DEFAULT (0)
, AStr varchar(15) NULL DEFAULT ('A')
, BStr varchar(15) NULL DEFAULT ('B')
, TF bit NULL DEFAULT (0)
, Amount money NULL DEFAULT (100.00)
);
INSERT INTO dbo.DefTest VALUES (1,'Test','Test',1,20);
INSERT INTO dbo.DefTest DEFAULT VALUES;
INSERT INTO dbo.DefTest VALUES (NULL,NULL,NULL,NULL,NULL);
SELECT * FROM dbo.DefTest;
SELECT產生了你期望的結果。具有指定值的行,具有所有默認值的行以及具有所有NULL值的行。
然後我嘗試這樣的:
UPDATE dbo.DefTest
SET Id = DEFAULT
結果是什麼我所希望的:所有行具有0 ID值,默認值。
我們設定每列其默認值只有當它是目前空,我需要使用CASE語句,所以我想這:
UPDATE dbo.DefTest
SET Id=CASE WHEN Id IS NULL THEN DEFAULT ELSE Id END
, AStr = CASE WHEN AStr IS NULL THEN DEFAULT ELSE AStr END
, BStr = CASE WHEN BStr IS NULL THEN DEFAULT ELSE BStr END
, TF = CASE WHEN TF IS NULL THEN DEFAULT ELSE TF END
, Amount = CASE WHEN Amount IS NULL THEN DEFAULT ELSE Amount END
但我得到:
關鍵字'DEFAULT'附近的語法不正確。
所以我猜UPDATE語句只能使用DEFAULT作爲列值的直接賦值。
所以,做你想做什麼,你只需要運行一個更新具有您要用來替換空值的默認值的每一列:
UPDATE MyTable
SET MyColumn = DEFAULT
WHERE MyColumn IS NULL
我已經驗證了這個工程。
通過查詢元視圖/表以及生成動態sql語句並執行它們,您可以節省編寫數百條語句的麻煩。