最初に、私の壊れた英語で申し訳ありません。
2 つの異なる SQL インスタンスに 2 つの異なるデータベースがあり、両方のインスタンスがリンク サーバーによって相互に参照されています。この参照をデータベース ソリューションに追加し、変数を使用してリンクを呼び出します。これは正常に機能し、正常に構築されています。
sqlpackage を使用してデータベースの展開を自動化するときに問題があります。内部リリースごとに DACPAC ファイルが生成されます。次のスプリントで展開が必要になると、SQLPackage.exe を使用して比較が行われます。これにより、最後のスプリントで生成された新しいオブジェクトを含むスクリプトが生成され、1 つのことを除いて正常に動作しています。
最新の .DACPAC と前回のリリースでビルドされた .DACPAC を比較すると、リンク サーバーを参照するすべてのオブジェクトが結果のスクリプト ファイルに表示されます。これ自体は大きな問題ではありませんが、クライアントに配信するときに、変更する必要のないオブジェクトがあります。
リンクされたサーバー変数のインクルードを指定するオプションはありますか? どのオブジェクトを含めるかを選択する方法はありますか (このオブジェクトが変更され、パッケージに含める必要があるシナリオが存在する可能性があるため、これを恐れています)。
編集: このオブジェクトは、sqlpackage を使用する場合にのみ表示されます。Visual Studio 2012 のスキーマ比較には表示されません。
これは私が現在使用しているパラメータです:
SqlPackage.exe /Action:script /p:BlockOnPossibleDataLoss=False /OverwriteFiles:True "/OutputPath:delta_scripts.publish.sql" /p:CommentOutSetVarDeclarations=True /p:DropPermissionsNotInSource=False /p:DropRoleMembersNotInSource=False /p:GenerateSmartDefaults=True /p:IgnorePermissions=True /p:IgnoreRoleMembership=True /p:IgnoreUserSettingsObjects=True /p:IgnoreCryptographicProviderFilePath=True /p:IgnoreLoginSids=True /p:IgnoreIdentitySeed=True /p:IgnoreFilegroupPlacement=False /p:IgnoreExtendedProperties=True /p:IncludeTransactionalScripts=False /p:ScriptDeployStateChecks=False /p:ScriptDatabaseOptions=False /v:Path1=C: /v:Path2=C: /v:Path3=C: /v:Path4=C: /v:Path5=C: /v:Path6=C: /v:Path7=C: /v:Path8=C: /v:Path9=C: "/TargetFile:olddacpac.dacpac" "/SourceFile:newdacpac.dacpac" "/TargetDatabaseName:DBNAME" "/SourceDatabaseName:DBNAME" /Variables:linkedserver=linkedserver /Variables:tempdb=tempdb /Variables:master=master /Variables:msdb=msdb