スキーマ比較に関する問題のトラブルシューティング
2 つのデータベース スキーマを比較するときに、ここで説明する問題が発生する場合があります。
依存関係と更新スクリプト
更新スクリプトにオブジェクトを正しい順序で生成するために、スキーマ比較はオブジェクトの依存関係を調べます。 たとえば、ビューがテーブルに依存する場合、テーブルを作成してからビューを作成する必要があります。 第 2 のオブジェクトに依存しているオブジェクトがスキーマで修飾された名前を使用していないと、その依存関係が識別されないため、更新スクリプトまたは作成スクリプトに正しい順序でステートメントが作成されない場合があります。 この順序が正しくないと、ソースと一致するようにターゲットを更新したり、変更をデータベースに配置したりするときに、エラーが発生する可能性があります。 この問題は、データベースのビルド スクリプトで発生することもあります。
注意
この問題の発生を防ぐには、依存関係に関与しているオブジェクトの名前がスキーマで修飾されていることを確認します。 次の例に示すように、単に KeysTable を参照する代わりに [dbo].[KeysTable] を参照するようにステートメントの末尾を変更すると、依存関係を正しく識別できるようになります。
CREATE VIEW [NewUser].[ViewReferencingScalarFunction] AS SELECT Column2, dbo.SimpleMultiplyParamByTwo(PK_Column) AS [Function] FROM KeysTable
テーブルとインデックスのオプション
スキーマ比較では、sp_tableoption または sp_indexoption を使用して設定されたオプションを比較またはスクリプトしません。 この問題の対処方法はありません。
大規模なデータベースの比較時のタイムアウト
大規模なデータベースのスキーマを比較しているときにタイムアウト エラーを受け取った場合、タイムアウトの設定値を増やす必要があります。 このオプションは、ユーザー インターフェイスの形では公開されていません。 レジストリの HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0\VSTSDB\Database の下に格納されている QueryTimeoutSeconds の値を変更する必要があります (秒で指定します)。 既定のタイムアウトは 60 秒です。
ファイルおよびファイル グループの比較
ターゲット データベース内のファイル グループが読み取り専用である場合、そのデータベースとデータベース プロジェクト間のスキーマ比較において、そのプロパティは常に相違があるものとして表示されます。 また、スキーマを比較するとき、プライマリ ファイル グループは無視されます。
さらに、同じサーバーの 2 つのデータベースを同期する場合、セカンダリ ファイルおよびファイル ストリームを同期しようとすると、問題が発生する場合があります。 このような問題は、同期のときにファイル グループとファイルを除外することで解決できます。