【问题标题】:Conflicts of records in SQL ServerSQL Server 中的记录冲突
【发布时间】:2013-12-15 00:42:22
【问题描述】:

我有以下问题。我有一个.tsv 文件(用于电影、年份和流派)。我想把它上传到 SQL Server 2012。

我创建了一个表

CREATE TABLE Genres2
(
MovieName varchar(255) NOT NULL,
Year int NOT NULL,
Genre varchar(255) NOT NULL
PRIMARY KEY (MovieName, Year)
);

上传时

BULK INSERT Genres3
FROM 'c:\Users\genres6.tsv'
WITH
(
    FIELDTERMINATOR='\t',
    ROWTERMINATOR='\n'
);

我收到一个错误

重复键值为

但是notepad++ 说,文件中只有一个这样的值。

任何想法如何解决它?先感谢您。

【问题讨论】:

  • 您将(MovieName, Year) 定义为主键,您确定您搜索的是这个组合而不是MovieNameYear?什么应该是独一无二的?
  • 最好有一个 INT 列作为您的主键,您是否考虑过使用一个标识列作为主键??
  • 只是出于对 .tsv 文件的好奇,您的第一行是否有列名???
  • @MuhammedAli - “最好有一个 INT 列作为您的主键”不是一个有效的假设。使用bigintuniqueidentifier 有很多注意事项
  • @Yosi 我相信这样说是绝对正确的,因为只要有可能,您是否拥有主键,因为与任何其他数据类型相比,INT 将为您提供更好的性能。]

标签: sql sql-server composite-primary-key


【解决方案1】:

在这里进行简单的故障排除:

  1. 禁用或删除主键约束和加载数据。

  2. 运行查询以查找建议的键列中的重复条目。

  3. 如果没有重复,则添加约束以复制到具有该约束的新表。

【讨论】:

  • (……只是打字,你就打败了我。)
  • @whytheq 这也发生在我身上很多次。我还添加了一条评论来推动“讨论”)
  • 感谢您的建议。它返回两个值:8minutes, 2011 和 8Minutes, 2011。不同之处在于 8 之后的大写字母。
  • 查看此链接:stackoverflow.com/questions/4879846/…。您可以使整个数据库区分大小写或仅区分某些列。
  • 不区分大小写可能要容易得多——就你的理智而言
猜你喜欢
  • 2017-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-01
相关资源
最近更新 更多