从多个表插入表

时间:2018-04-04 09:48:56

标签: sql-server tsql select sql-insert row-number

我试图从多个表格中插入,但我遇到了一些问题。当我尝试使用10个条目的样本大小的testdata时,它工作正常。当我尝试在我的实际任务上运行它时,我得到一个约束错误。应该插入大约13000个条目。

我尝试做的是将数据从4个不同的表移动到已经存在的第5个表。表5有一个主键,它不会自行递增,所以我需要在插入查询中定义它并递增它。

到目前为止,这是我的插页:

INSERT INTO LOCATION
    (INCREMENT,ID, EID, TEXT, DID, LOCATION, CODE, TEXT, QUANTITY)
SELECT
    ROW_NUMBER() OVER(ORDER BY(SELECT NULL)),
    p.ID,
    f.EID,
    p.TEXT,
    d.ID,
    f.LOCATION,
    d.CODE,
    s.TEXT,
    f.QUANTITY
FROM PROD p
left join Fil  f on f.EID= p.EID
left join DEEP d on f.LOCATION= d.LOCATION
left join SIZE s on d.ID = s.ID

我不熟悉ROW_NUMBER函数所以我认为我的错误就在那里。

1 个答案:

答案 0 :(得分:0)

问题是您的INCREMENT列是UNIQUE,您可能正在尝试添加已存在的值。您可以使用以下内容确保它们不会重复:

DECLARE @MaxIncrement INT = (SELECT ISNULL(MAX(INCREMENT), 0) FROM Location)

INSERT INTO LOCATION
    (INCREMENT,ID, EID, TEXT, DID, LOCATION, CODE, TEXT, QUANTITY)
SELECT
    @MaxIncrement + ROW_NUMBER() OVER(ORDER BY(SELECT NULL)),
    p.ID,
    f.EID,
    p.TEXT,
    d.ID,
    f.LOCATION,
    d.CODE,
    s.TEXT,
    f.QUANTITY
FROM PROD p
left join Fil  f on f.EID= p.EID
left join DEEP d on f.LOCATION= d.LOCATION
left join SIZE s on d.ID = s.ID

我还建议在该列上使用IDENTITY(您必须重新创建表格,将数据作为中间步骤移开),因此您不再有此问题。< / p>