TL;DR 是否有与 NULL 等效的东西,或者可以用来将其视为 NULL 的标志?可以设置空字符串,但似乎不正确(并且 Column 可以是整数类型)。
我有一个Table1像:
Table1 (Id (PK, NOT NULL), Col1 (NOT NULL), Col2 (NOT NULL), Col3)
在此只能Col3包含 NULL 值,其他都是必填列。现在我想更新这个表中的一个条目,但它需要得到某人的批准,所以我有另一个表Table1Change,如下所示:
Table1Change (Id (PK, NOT NULL), Table1Id (FK, NOT NULL), Col1, Col2, Col3)
Col1、Col2、Col3 可以为 NULL。如果它们具有非空值,则意味着它将替换Table1. 所以 ApproveUpdate 存储过程看起来像:
UPDATE Table1
SET Col1 = ISNULL(Table1Change.Col1, Table1.Col1),
Col2 = ISNULL(Table1Change.Col2, Table1.Col2),
Col3 = ISNULL(Table1Change.Col3, Table1.Col3)
FROM Table1
INNER JOIN Table1Change ON Table1.Id = Table1Change.Table1Id
WHERE Table1.Id = @table1Id
AND Table1Change.Id = @table1ChangeId;
上述方法的一个问题是,假设我有一些值,Col3现在Table1我想删除它(我应该尽可能为Col3NULL),Table1Change只是简单地将值设置为 NULL 是行不通的。ISNULL将采用原始列的值。
所以现在我的问题是,是否有类似的东西NULL,或者我可以使用一些标志来设置Col3in的值Table1Change,所以如果设置了存储过程,那么存储过程将Col3变为Table1NULL。可以设置空字符串但看起来不太好(并且 Col3 可以是整数类型)。
我知道的另一种选择是改变Table1Change表格的处理方式。新架构将如下所示:
Table1Change(Id (PK, NOT NULL), Table1Id(FK, NOT NULL), Col1(NOT NULL), Col2(NOT NULL), Col3)
现在,如果对 的行有任何更新Table1,所有数据都将被复制到Table1Change更新的字段。类似的东西(Col1, Col2, Col3)(oldValue, oldValue, newValue)。现在问题解决了,因为 ApproveUpdate 只会将整个记录复制到原始表中,因此如果 newValue 为 NULL,它将替换现有值。但这对我来说需要很多改变,所以我把它作为最后的选择。如果没有简单的方法来改变我当前的设置,我也愿意为这种类型的用例提供其他更好的设计。