-1

我正在使用 SQL 2008 R2。我有 5 个复合主键

(NOID ,CODE_CLIENT,CODE_DEST,DATE_CLOTURE,DATE_CLOTUR_REEL) 

在我的桌子上。

我尝试使用以下语法删除双精度:

DELETE
FROM [LETTRE_VOIT_FINAL]
WHERE EXISTS
    (SELECT NOID ,
            CODE_CLIENT,
            CODE_DEST,
            DATE_CLOTURE,
            DATE_CLOTUR_REEL
     FROM LETTRE_VOIT_FINAL
     GROUP BY NOID ,
              CODE_CLIENT,
              CODE_DEST,
              DATE_CLOTURE,
              DATE_CLOTUR_REEL HAVING count(*) > 1)

它删除了所有条目,幸运的是我已经做了备份。

在我只有 4 个复合主键之前,我添加了最后一个 DATE_CLOTUR_REEL。因为主键的值不能为空,所以我把值getdate()放到这个键中。因此,我不能将所有 5 个设置为复合主键,因为我有双键。所以现在,我的桌子上没有主键。

4

2 回答 2

1

要从表中删除重复项:

;WITH cte
     AS (SELECT ROW_NUMBER() OVER (PARTITION BY NOID ,CODE_CLIENT,CODE_DEST,DATE_CLOTURE,DATE_CLOTUR_REEL
                                       ORDER BY ( SELECT 0)) RN
         FROM   LETTRE_VOIT_FINAL)
DELETE FROM cte
WHERE  RN > 1
于 2013-03-18T11:20:11.337 回答
0

问题是存在语句中的子查询不以任何方式与“删除”绑定。结果是 ANY 双打的存在删除了表中的所有记录。此外,我认为您将主键弄乱了(正如其他用户所评论的那样)。无论如何,您可以使用 CTE 删除重复项:

WITH CTE (COl1,Col2, DuplicateCount)
AS
(
    SELECT COl1,Col2,
        ROW_NUMBER() OVER(PARTITION BY COl1,Col2 ORDER BY Col1) AS DuplicateCount
    FROM DuplicateRcordTable
)

DELETE
FROM CTE
WHERE DuplicateCount > 1
于 2013-03-18T11:05:18.263 回答