所以我需要从table1到table2插入一些记录,具体取决于他们的user_id(PVKEY)和record_id(CNKEY)。为了更好地解释,每个用户都有自己唯一的user_id(PVKEY),每个记录都有自己的record_id(CNKEY)。一个用户可以有几个记录,但每次添加新记录时都需要获取新记录(CNKEY)每次我尝试插入我收到的消息:
无法将值NULL插入列'CNKEY',表中 'Progress.dbo.CONTHIST';列不允许空值。 INSERT失败。 声明已经终止。
user_id(PVKEY):数据和系统类型为float,主键为FALSE,允许空值为TRUE。 record_id(CNKEY):数据和系统类型为float,主键为TRUE,allow nulls为FALSE,record_id(CNKEY)仅存在于table2中但不存在于table1中,而user_id(PVKEY)存在于两个表中。所以这是我的例子,我试图执行它没有任何运气:
INSERT INTO dbo.CONTHIST (PVKEY, CONTTYPE, ASSIGNEDTO, CONTDATE, SOURCE, NOTES, CNKEY)
SELECT Pvkey, ContactType, AssignedTo, Date, SourceCode, ContactStatus
FROM MopUpEOC
WHERE PVKEY in (5,7,11)
我希望有一些善良的灵魂会帮助我,我会非常感激! :d
答案 0 :(得分:2)
错误很明显:匹配记录中的CNKEY
为NULL
,至少有一次。
您基本上有两种选择:
CNKEY
以允许NULL
值。后者会使用COALESCE()
,如下所示:
INSERT INTO dbo.CONTHIST (PVKEY, CONTTYPE, ASSIGNEDTO, CONTDATE, SOURCE, NOTES, CNKEY)
SELECT Pvkey, ContactType, AssignedTo, Date, SourceCode,
COALESCE(ContactStatus, '') -- Or whatever the appropriate value would
FROM MopUpEOC
WHERE PVKEY in (5, 7, 11)
答案 1 :(得分:0)
问题是您没有将CNKEY作为插入值传递,但是您将其定义为要插入的列之一。
INSERT INTO dbo.CONTHIST (PVKEY, CONTTYPE, ASSIGNEDTO, CONTDATE, SOURCE, NOTES, CNKEY) -- You defined it here!
SELECT Pvkey, ContactType, AssignedTo, Date, SourceCode, ContactStatus -- But aren't adding it here
FROM MopUpEOC
WHERE PVKEY in (5,7,11)
如果此CNKEY值应为新的数值,您可以在MopUpEOC表中将其更改为IDENTITY字段,并将其从" INSERT INTO ..."中删除。线。这样,SQL Server将为每个记录自动为该列添加增量数值,这将是唯一的。