【问题标题】:Insert data from table1 to table 2 where is user id and record id将数据从表 1 插入表 2,其中用户 ID 和记录 ID
【发布时间】:2016-06-13 15:53:25
【问题描述】:

所以我需要根据 user_id (PVKEY) 和 record_id (CNKEY) 将一些记录从 table1 插入到 table2。为了更好地解释,每个用户都有自己唯一的 user_id (PVKEY),每条记录都有自己的 record_id (CNKEY)。一个用户可以有几条记录,但是每次添加新记录时,它都需要获取新的record_id(CNKEY)每次我尝试插入时都会收到消息:

无法将值 NULL 插入列“CNKEY”,表 'Progress.dbo.CONTHIST';列不允许空值。插入失败。 该语句已终止。

user_id (PVKEY):数据和系统类型为float,主键为FALSE,允许空值为TRUE。 record_id(CNKEY):数据和系统类型为float,主键TRUE,允许空值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

【问题讨论】:

    标签: sql insert


    【解决方案1】:

    错误很明显:匹配记录中的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)
    

    【讨论】:

    • 他目前的错误是关于 CNKEY 字段,但他没有在声明中提供。插入提及7个字段,选择只有6个。
    • ContactStatus 没问题,没有空值。问题是Cnkey
    • 我正在尝试根据 id-s 将记录从 table1 插入到 table2。我收到错误消息:消息 2627,级别 14,状态 1,第 5 行违反主键约束“PK_CONTHIST”。无法在对象“dbo.CONTHIST”中插入重复键。重复键值为 (0)。该语句已终止。问题也与记录有关,因为每个记录都有他的 record_id,这对于表中的每条记录都是唯一的。任何建议都会有所帮助。谢谢:D
    【解决方案2】:

    问题是您没有将 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 会自动为每条记录的该列添加一个增量数值,这将是唯一的。

    【讨论】:

    • 我正在尝试根据 id-s 将记录从 table1 插入到 table2。我收到错误消息:消息 2627,级别 14,状态 1,第 5 行违反主键约束“PK_CONTHIST”。无法在对象“dbo.CONTHIST”中插入重复键。重复键值为 (0)。该语句已终止。问题也与记录有关,因为每个记录都有他的 record_id,这对于表中的每条记录都是唯一的。任何建议都会有所帮助。谢谢:D
    • 修改了我的答案,希望对您有所帮助。
    猜你喜欢
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    相关资源
    最近更新 更多