我在SQL Server中有一个查询:
insert into [Sha1](
[IDTbl]
,[IDTbl_old]
,[IDold]
,[WordsAsl])
(SELECT [IDTbl]
,[IDTbl_old]
,[IDold]
,[WordsAsl]
FROM [Sha2])
如何解决此错误:
无法将值NULL插入列'IDTbl',表'Sha1';柱 不允许空值。 INSERT失败。
答案 0 :(得分:2)
除了排除SELECT
中包含NULL
的行之外的其他选项是使用ISNULL()
函数提供默认值而不是NULL
:
INSERT INTO dbo.Sha1(IDTbl, IDTbl_old, IDold, WordsAsl)
SELECT
ISNULL(IDTbl, 42),
IDTbl_old,
IDold,
WordsAsl
FROM dbo.Sha2
我在此处规定,如果IDTbl
的{{1}}值为dbo.Sha2
,则NULL
应该返回42(因此将此值插入SELECT
而不是dbo.Sha1
)。
答案 1 :(得分:1)
源表中的某些行必须包含NULL
字段中的IDTbl
。
尝试:
insert into [Sha1](
[IDTbl]
,[IDTbl_old]
,[IDold]
,[WordsAsl])
SELECT [IDTbl]
,[IDTbl_old]
,[IDold]
,[WordsAsl]
FROM [Sha2]
WHERE IDTbl IS NOT NULL
如果目标表中的其他列具有约束,您可能会发现需要使此WHERE
子句更复杂。