将数据从table1插入到表2,其中是用户ID和记录ID

时间:2016-06-09 12:29:30

标签: sql insert

所以我需要从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

2 个答案:

答案 0 :(得分:2)

错误很明显:匹配记录中的CNKEYNULL,至少有一次。

您基本上有两种选择:

  • 更改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将为每个记录自动为该列添加增量数值,这将是唯一的。