Sql server SQL插入DUP

Sql server SQL插入DUP,sql-server,Sql Server,我在表dbo.FileColumns上设置了以下索引: RowID、ColumnID上的聚集的、唯一的主键索引 我得到这个错误: 违反主键约束“PK_FileColumns”。无法在对象“dbo.FileColumns”中插入重复键 插入时如何排除此类重复行?请帮助,谢谢。您必须决定如何处理重复记录。一种技术是使用带有分区的行号,根据您定义的某些业务规则(如日期或值顺序)选择第一条记录 INSERT dbo.FileColumns(FileID, RowID, ColumnID, Value)

我在表dbo.FileColumns上设置了以下索引: RowID、ColumnID上的聚集的、唯一的主键索引

我得到这个错误: 违反主键约束“PK_FileColumns”。无法在对象“dbo.FileColumns”中插入重复键


插入时如何排除此类重复行?请帮助,谢谢。

您必须决定如何处理重复记录。一种技术是使用带有分区的行号,根据您定义的某些业务规则(如日期或值顺序)选择第一条记录

INSERT dbo.FileColumns(FileID,  RowID, ColumnID, Value)
SELECT FileID, RowID, ColumnID, Value FROM #TempFileColumns;
其他技术可能是查看为什么在生成临时表时会获得重复的文件ID(可能是其中的某个错误),或者使用聚合来获取唯一的文件ID(这似乎不适合此场景)。

一种可能的(已经提到)方法是不插入ID,并允许表处理密钥生成(假设您已将FileID设置为标识列):

另一种方法是,如果您正在处理可能已经在表中的数据,则首先检查目标以确保尚未加载它:

INSERT dbo.FileColumns(RowID, ColumnID, Value)
SELECT RowID, ColumnID, Value 
FROM #TempFileColumns;

如果您想要所有的数据,那么如果主键是一个自动编号,您只需不插入它,或者如果您需要查找下一个可用的ID,您可以执行MAX(Field)+1。
INSERT dbo.FileColumns(RowID, ColumnID, Value)
SELECT RowID, ColumnID, Value 
FROM #TempFileColumns;
INSERT dbo.FileColumns(FileID,  RowID, ColumnID, Value)
SELECT FileID, RowID, ColumnID, Value 
FROM #TempFileColumns tmp
WHERE NOT EXISTS 
  (
    SELECT 1
    FROM dbo.FileColumns tbl
    WHERE tbl.FileID = tmp.FileID

  )