Sql 在两个没有重复项的表之间传输记录

Sql 在两个没有重复项的表之间传输记录,sql,sql-server,tsql,sql-server-2008-r2,Sql,Sql Server,Tsql,Sql Server 2008 R2,我在一个名为CENSUS(列:APN,ATTRIB\u VALUE,ATTNAME)的表中有数据,需要传输到名为PARCEL\u ATTR(列:L1\u PARCEL\u NBR,L1\u ATTRIB\u VALUE,L1\u ATTRIB\u NAME)的表中 地块属性的主键是两列L1地块属性和L1地块属性名 我尝试使用以下SQL语句将记录从普查插入地块属性,但未成功: INSERT INTO dbo.PARCEL_ATTR (L1_PARCEL_NBR, L1_ATTRIB_VALUE,

我在一个名为
CENSUS
(列:
APN,ATTRIB\u VALUE,ATTNAME
)的表中有数据,需要传输到名为
PARCEL\u ATTR
(列:
L1\u PARCEL\u NBR,L1\u ATTRIB\u VALUE,L1\u ATTRIB\u NAME
)的表中

地块属性
的主键是两列
L1地块属性
L1地块属性名

我尝试使用以下SQL语句将记录从
普查
插入
地块属性
,但未成功:

INSERT INTO dbo.PARCEL_ATTR (L1_PARCEL_NBR, L1_ATTRIB_VALUE, L1_ATTRIB_NAME) 
    SELECT 
        APN, ATTRIB_VALUE, ATTNAME 
    FROM 
        dbo.CENSUS 
    WHERE 
        NOT EXISTS (SELECT 1 
                    FROM PARCEL_ATTR 
                    WHERE CENSUS.APN = PARCEL_ATTR.L1_PARCEL_NBR 
                      AND CENSUS.ATTNAME = PARCEL_ATTR.L1_ATTRIB_NAME);
我每次都从SQL Server 2008 R2收到此错误:

违反主键约束“PKparcel_attr”。无法在对象“dbo.Parcel\u Attr”中插入重复键。重复的键值为(002-001-021,普查)


有人能帮我理解我做错了什么吗?

请尝试以下方法:

INSERT INTO dbo.PARCEL_ATTR (L1_PARCEL_NBR, L1_ATTRIB_VALUE, L1_ATTRIB_NAME) 
SELECT CENSUS.APN, CENSUS.ATTRIB_VALUE, CENSUS.ATTNAME 
FROM dbo.CENSUS 
     LEFT OUTER JOIN PARCEL_ATTR AS A 
     ON CENSUS.APN=A.L1_PARCEL_NBR AND CENSUS.ATTNAME=A.L1_ATTRIB_NAME)
WHERE
     A.L1_PARCEL_NBR IS NULL

我希望它能有所帮助。

您只是在过滤
包裹属性表中已经存在的记录。但是您没有删除
CENSUS
表中的重复项

使用
窗口功能
普查
表中删除重复项。试试这个

INSERT INTO dbo.PARCEL_ATTR
            (L1_PARCEL_NBR,
             L1_ATTRIB_VALUE,
             L1_ATTRIB_NAME)
SELECT APN,
       ATTRIB_VALUE,
       ATTNAME
FROM   (SELECT Row_number()OVER (partition BY APN, ATTNAME ORDER BY ATTRIB_VALUE) rn,
               APN,
               ATTRIB_VALUE,
               ATTNAME
        FROM   dbo.CENSUS
        WHERE  NOT EXISTS (SELECT 1
                           FROM   PARCEL_ATTR
                           WHERE  CENSUS.APN = PARCEL_ATTR.L1_PARCEL_NBR
                                  AND CENSUS.ATTNAME = PARCEL_ATTR.L1_ATTRIB_NAME))A
WHERE  rn = 1;