嗯,我学到了一些有趣的东西,可能对你有用。
我已经知道可以用这个插入一行所有的 DEFAULT 值:
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
结果如我所愿:所有行的 Id 值为 0,默认值。
现在要将每列设置为其默认值,仅当它当前为 NULL 时,我需要使用 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 作为列值的直接赋值。
所以要做你想做的事,你只需要为每一个有你想用来替换 NULL 的默认值的列运行一次更新:
UPDATE MyTable
SET MyColumn = DEFAULT
WHERE MyColumn IS NULL
我已验证此方法有效。
通过查询元视图/表,生成动态sql语句并执行,您可以省去编写数百条语句的麻烦。