INSERT dbo.FileColumns(FileID, RowID, ColumnID, Value)
SELECT FileID, RowID, ColumnID, Value FROM #TempFileColumns;
我在表dbo.FileColumns上设置了这个索引: RowID上的集群唯一主键索引ColumnID
我收到此错误: 违反PRIMARY KEY约束'PK_FileColumns'。无法在对象'dbo.FileColumns'中插入重复键。
如何在插入时排除此类重复行?请帮助,谢谢。
答案 0 :(得分:0)
您必须决定如何处理重复记录。一种方法是使用带分区的ROW_NUMBER根据您定义的某个业务规则选择第一条记录,例如日期或值顺序。
INSERT dbo.FileColumns(FileID, RowID, ColumnID, Value)
SELECT FileID, RowID, ColumnID, Value
FROM (
SELECT
ROW_NUMBER() OVER (PARTITION BY FileID ORDER BY RowID, ColumnID) AS RowNum,
FileID,
RowID,
ColumnID,
Value
FROM #TempFileColumns) T
WHERE RowNum = 1
其他技术可能是为什么在生成临时表时可能会出现重复的文件ID(可能是某处的某个错误),或者使用聚合来获取唯一的文件ID(这似乎不适合这种情况)
答案 1 :(得分:0)
一种可能的(已经提到的)方法是不插入ID,并允许表处理密钥生成(假设您将FileID设置为IDENTITY列):
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
)