向已有数据的表指定列插入数据时触发AccountTenure非空约束错误如何处理
报错原因
INSERT 语句的作用是新增整行数据,而非修改表中已存在的行。当你仅指定 SubClassGroup 一列作为插入字段时,数据库会自动给该行其余所有字段填充NULL值,而你的 T_SG_WICA_POL_DATA 表中 AccountTenure 字段设置了非空约束,不允许存入NULL,因此触发了插入失败的报错。
解决方案
根据你的实际需求选择对应操作:
场景1:确实需要新增全新的行
你需要在插入语句中补充所有带非空约束的字段的有效值,示例如下(以AccountTenure字段填充默认值0为例,你可以替换为实际业务需要的有效值):
INSERT INTO T_SG_WICA_POL_DATA (SubClassGroup, AccountTenure) SELECT M.[Subclass_Main], 0 -- 此处替换为AccountTenure的合法取值,也可以引用关联表中对应字段 FROM [WICA subclass mapping] AS M LEFT JOIN T_SG_WICA_TRANSACTION_VIEW ON M.[Subclass Code] = Subclass;
如果AccountTenure字段已经设置了默认值,也可以直接指定使用默认值:
INSERT INTO T_SG_WICA_POL_DATA (SubClassGroup, AccountTenure) SELECT M.[Subclass_Main], DEFAULT FROM [WICA subclass mapping] AS M LEFT JOIN T_SG_WICA_TRANSACTION_VIEW ON M.[Subclass Code] = Subclass;
场景2:需要更新表中已存在行的SubClassGroup字段
如果你的需求是给表中已有的行匹配更新SubClassGroup的值,而非新增行,应该使用UPDATE语句而非INSERT,SQL Server 环境下的示例如下:
UPDATE P SET P.SubClassGroup = M.[Subclass_Main] FROM T_SG_WICA_POL_DATA P INNER JOIN [WICA subclass mapping] M ON P.Subclass = M.[Subclass Code]
如果需要保留匹配不到的行的原有值,可以把INNER JOIN换成LEFT JOIN即可。
内容的提问来源于stack exchange,提问作者ppn
相关产品推荐
相关产品推荐

