仕事で住所マスタを取り込んで、データベースに保存する際に、プライマリキー重複のエラーが発生しました。 原因を調べたら、住所マスタのデータに同じ住所ですが、ひらがなとカタカナ両方で登録されたデータがあります。 SQL Serverの照合順序はひらがなとカタカナを区別しないように設定しています。本番運用も開始したので、 照合順序の変更はできません。

住所自体は同じなので、片方をデータベースに登録すれば、問題ないと判断し、重複した場合ひらがなを登録する ように取込み処理を変更することにしました。

いろいろ調べて、SQL文のWHERE条件でも照合順序の指定ができることがわかりました。 そして、取込み用のワークテーブルを作成し、重複したカタカナデータを削除し、住所マスタを作成しました。

INSERT INTO POST_MASTER
  SELECT A.*
  FROM POST_WORK A
    INNER JOIN POST_WORK B
      ON A.POST_CODE = B.POST_CODE
        AND A.ADDRESS = B.ADDRESS
  WHERE A.ADDRESS >= B.ADDRESS COLLATE Japanese_90_CS_AS_KS_WS