【问题标题】:I cant insert into sql我无法插入sql
【发布时间】:2019-03-14 10:54:51
【问题描述】:

IMDB database Image to database structure FletNix

INSERT INTO FletNix_2.dbo.Movie_Cast
    SELECT cast(Pid AS int) AS person_id,
    cast(Mid AS int) AS movie_id,
    LEFT(Role, 255) AS role
    FROM MYIMDB.dbo.Imported_Cast

INSERT INTO FletNix_2.dbo.Movie_Directors
    SELECT cast(Did AS int) AS person_id,
    cast(Mid AS int) AS movie_id
    FROM MYIMDB.dbo.Imported_Movie_Directors

错误按摩:

消息 2627,级别 14,状态 1,第 71 行违反主键 约束“pk_moviecast”。无法在对象中插入重复键 'dbo.Movie_Cast'。重复键值为 ((Unknown))。

消息 547,级别 16,状态 0,第 77 行 INSERT 语句冲突 具有 FOREIGN KEY 约束“fk_directors_Person”。冲突 发生在数据库“FletNix_2”、表“dbo.Person”、列 'person_id'。

我知道我需要使用 distinct,但是当我这样做时

INSERT INTO FletNix_2.dbo.Movie_Cast
    SELECT cast(Pid AS int) AS person_id,
    cast(Mid AS int) AS movie_id,
    distinct LEFT(Role, 255) AS role
    FROM MYIMDB.dbo.Imported_Cast 

它给出了一个错误: 不同的语法不正确

当我在 SELECT 之后放置 distinct 时,我仍然得到一个错误:

违反主键约束“pk_moviecast”。无法插入 对象“dbo.Movie_Cast”中的重复键。重复键值为 ((未知))

INSERT 语句与 FOREIGN KEY 约束冲突 “fk_directors_Person”。数据库“FletNix_2”中发生冲突, 表“dbo.Person”,列“person_id”。

【问题讨论】:

    标签: sql sql-server-2008


    【解决方案1】:

    distinct 应该在select 之后

        INSERT INTO FletNix_2.dbo.Movie_Cast
        SELECT distinct cast(Pid AS int) AS person_id,
        cast(Mid AS int) AS movie_id,
        LEFT(Role, 255) AS role
        FROM MYIMDB.dbo.Imported_Cast 
    

    因为你的角色列是主要的,所以它不必重复,所以我使用 row_number() 来生成唯一编号

         select 
        cast(Pid AS int) AS person_id,
        cast(Mid AS int) AS movie_id,        
        row_number()over( order by (select null)) as role
        FROM MYIMDB.dbo.Imported_Cast 
    

    【讨论】:

    • 我编辑了我的问题,因为它仍然给出错误
    • @legitcoding 你的主键列是什么?是 persion_id 吗?
    • 我添加了数据库结构,希望大家帮忙!
    • @legitcoding 在你的 Movie_Cast 表角色中是主键,对吗?
    • 然而角色是那里的主键
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 2017-03-17
    相关资源
    最近更新 更多