在 case 子句中使用默认值更新

Art*_*yan 5 sql-server sql-server-2014

我有一张像

CREATE TABLE Mytable (ID int identity, Name nvarchar(10)); 
GO 
INSERT INTO MyTable (Name) VALUES ('test1'); 
INSERT INTO MyTable (Name) VALUES ('test2'); 
GO 
ALTER TABLE MyTable ADD CONSTRAINT DF_Name DEFAULT('test') FOR Name;
Run Code Online (Sandbox Code Playgroud)

现在我想像这样更新我的 Name 列:

Update MyTable
set name = case ID when 1 then DEFAULT END;
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:

关键字“DEFAULT”附近的语法不正确

如何在子句中使用UPDATEwithDEFAULT语句CASE

Mar*_*ith 8

你不能。

更新语法的相关位是

SET column_name = { expression | default | null }
Run Code Online (Sandbox Code Playgroud)

您只能使用default关键字代替表达式,而不能表达式使用。因此,您要么需要直接使用默认值(可以从系统视图中查找为动态的),要么将其溢出到带有适当的互斥where子句的两个更新语句中- 一个使用default,第二个使用表达式 - 如果你真的想使用那个关键字。