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