1

特定のテーブルの 1 つ以上の列で明らかに異なる照合順序を持つ運用データベースと開発データベースがあります。どの列が異なるかを返すスクリプトを作成する方法はありますか?

4

1 に答える 1

5

Red-Gate SQL Compareは、照合の違いを強調表示します。さまざまなコストと品質の代替ツールが他にもたくさんありますが、ここでブログを書いていますが、Red-Gate のツールの品質は保証できます。これが 1 回限りの場合は、試用版を使用できます。

つまり、データベースが同じサーバー上にある場合、またはサーバーの 1 つに別のサーバーへのリンク サーバーがある場合は、次のようなことができます。

SELECT DevObject  = do.name, DevColumn  = dc.name, DevColl  = dc.collation_name,
       ProdObject = po.name, ProdColumn = pc.name, ProdColl = pc.collation_name
FROM devdb.sys.objects AS do
INNER JOIN devdb.sys.schemas AS ds
  ON do.[schema_id] = ds.[schema_id]
INNER JOIN devdb.sys.columns AS dc
  ON do.[object_id] = dc.[object_id]
INNER JOIN productiondb.sys.objects AS po
  ON do.name = po.name
INNER JOIN productiondb.sys.schemas AS ps
  ON ds.name = ps.name
  AND po.[schema_id] = ps.[schema_id]
INNER JOIN productiondb.sys.columns AS pc
  ON dc.name = pc.name
  AND po.[object_id] = pc.[object_id]
WHERE
  dc.collation_name <> pc.collation_name
  -- AND do.name IN (N't1', N't2', N't3', ...) -- filter certain table names
;

それらが異なるサーバー上にある場合は、1 つのサーバー上にリンク サーバーを作成し、参照を 4 部構成の名前linkedservername.devdb.sys.objectsなどに適切に変更する必要がある場合があります。

于 2013-03-12T15:00:04.557 に答える