1

SQL Server 2005 のフィールドを、あるテーブルから別のテーブルの別のフィールドに更新しようとしていますが、UNIQUE KEY 制約の違反全体が発生しており、スクリプトのどこで問題が発生したのかわかりません。 . これが私がこれまでに持っているものです:

UPDATE table1
SET column1 = (SELECT table2.column2
FROM         table2 INNER JOIN
                  table1 ON table1.id = table2.id)

私は SQL にまったく慣れていないので、この状況に関する情報をぜひお寄せください。どうもありがとう!

4

1 に答える 1

4

この構文は少しわかりやすいように見えますが、table2.column2の値が一意であることを検証する必要があります。

UPDATE t1 
  SET column1 = t2.column2
    FROM dbo.table1 AS t1
    INNER JOIN dbo.table2 AS t2
    ON t1.id = t2.id;

table1.column1に一意の制約があり、そのidが各テーブルの主キーであると仮定すると、最初に潜在的な違反をチェックできます。これにより、ソーステーブルのcolumn2に重複があるかどうかがわかります。

SELECT column2
  FROM dbo.table2
  WHERE id IN (SELECT id FROM dbo.table1)
  GROUP BY column2
  HAVING COUNT(column2) > 1;

これにより、table2に、2つのテーブル間で共通ではない他の行と競合する単一の値があるかどうかがわかります。

SELECT t2.column2
  FROM dbo.table2 AS t2
  WHERE EXISTS (SELECT 1 FROM dbo.table1 AS t1
    WHERE t1.column1 = t2.column2
    AND t2.id <> t1.id);
于 2012-08-07T17:55:01.450 に答える