是否有 SQL 关键字表示 "Don't Change"?
Is there a SQL keyword meaning "Don't Change"?
目前,SQL 允许您在插入或更新记录时使用关键字 DEFAULT,告诉数据库只使用该列的默认数据类型值:
UPDATE TABLE SET COL_A = DEFAULT, COL_B = 'hello' WHERE ID = 123
例如COL_A的数据类型是VARCHAR2,语句会在COL_A.
中插入NULL
但是,如果我想执行更新,但保持 COL_A 不变怎么办?我知道您可能会说,只需从更新语句中删除 COL_A 即可。但是,假设 COL_A 必须在语句中。是否有关键字让 SQL 知道保持 COL_A 的值不变?
比如我在想可能是这样的:
UPDATE TABLE SET COL_A = NOCHANGE, COL_B = 'hello' WHERE ID = 123
但这显然行不通。
您可以只使用列名本身:
UPDATE TABLE
SET COL_A = COL_A, COL_B = 'hello'
WHERE ID = 123;
这适用于任何数据库。这通常用于 "partial" 更新:
UPDATE TABLE
SET COL_A = (CASE WHEN foo = 'bar' THEN 'baz' ELSE COL_A END),
COL_B = 'hello'
WHERE ID = 123;
COL_B
始终更新。 COL_A
只是偶尔更新。
目前,SQL 允许您在插入或更新记录时使用关键字 DEFAULT,告诉数据库只使用该列的默认数据类型值:
UPDATE TABLE SET COL_A = DEFAULT, COL_B = 'hello' WHERE ID = 123
例如COL_A的数据类型是VARCHAR2,语句会在COL_A.
中插入NULL但是,如果我想执行更新,但保持 COL_A 不变怎么办?我知道您可能会说,只需从更新语句中删除 COL_A 即可。但是,假设 COL_A 必须在语句中。是否有关键字让 SQL 知道保持 COL_A 的值不变?
比如我在想可能是这样的:
UPDATE TABLE SET COL_A = NOCHANGE, COL_B = 'hello' WHERE ID = 123
但这显然行不通。
您可以只使用列名本身:
UPDATE TABLE
SET COL_A = COL_A, COL_B = 'hello'
WHERE ID = 123;
这适用于任何数据库。这通常用于 "partial" 更新:
UPDATE TABLE
SET COL_A = (CASE WHEN foo = 'bar' THEN 'baz' ELSE COL_A END),
COL_B = 'hello'
WHERE ID = 123;
COL_B
始终更新。 COL_A
只是偶尔更新。