SSDTデータベースプロジェクトの公開とデータ層アプリケーションとしての登録に問題があります。説明させてください。
リンクサーバーを介して他の2つのデータベース(BとC)を参照するデータベース(A)があります。 BとCに基づいてプロジェクトを作成し、プロジェクトのスナップショットを作成して、データベースBとCのdacpacを作成しました。dacpacを介してBとCへのデータベース参照を持つデータベースAのデータベースプロジェクトを作成しました。 SQLCMD変数を設定し、dbプロジェクトのddlスクリプトを変更して、未解決のリンクサーバー名の代わりにSQLCMD変数を使用しました。プロジェクトが構築されます!
プロジェクトをデータ層アプリケーションとして公開しようとしていますが、「DACデータベースとして登録されたデータベースは、SQL 2005 SP4、SQL 2008 SP2、SQL 2008 R2、SQL 2012、またはSQLAzureのインスタンスでホストする必要があります」というエラーが引き続き表示されます。 。ちなみに私はSQLServer2012を実行しています。
SSMSを介してデータ層アプリケーションとして登録できるかどうかをテストしようと思いました。 SSMS内では、[データ層アプリケーションとして登録]オプションがグレー表示されています。そのため、「データ層アプリケーションのエクスポート」を試みましたが、リンクされたサーバーオブジェクトに関して多くのエラーが発生しました。
私の質問は; SSDTデータベースプロジェクトを展開して、プロジェクトがリンクサーバーを使用しているデータ層アプリケーションとして登録することは可能ですか、それとも何か問題がありますか?可能であれば、誰かがアドバイスを提供することができます。
私は答えを探してグーグルを壊したので、どんな助けでも大歓迎です。私は以前に StackOverflow でこの質問をしましたが、応答がなかったので、よりターゲットを絞ったフォーラムに投稿しています。
私は最近このエラーが発生したので、これに遭遇した他の人のために私の解決策を追加します、
私のpublish.xmlで、RegisterDataTierApplicationをTrueに設定したことがわかりました。データベースを最初に公開したときは正常に機能しましたが、データベースがすでにデータ層アプリケーションとして登録されているため、同じエラーが発生しました。
Falseに設定する(またはGUIのチェックボックスをオフにする)と、正常に機能します。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.Microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<IncludeCompositeObjects>True</IncludeCompositeObjects>
<TargetDatabaseName>foo</TargetDatabaseName>
<DeployScriptFileName>foo.sql</DeployScriptFileName>
<BlockWhenDriftDetected>False</BlockWhenDriftDetected>
<RegisterDataTierApplication>False</RegisterDataTierApplication>
<ProfileVersionNumber>1</ProfileVersionNumber>
<TargetConnectionString>Data Source=foo;Integrated Security=True;Pooling=False</TargetConnectionString>
</PropertyGroup>
</Project>
Dacpacの抽出に関する注意として、ssmsを介して抽出すると、常にエラーが発生します。
VisualStudioでSQLServerオブジェクトエクスプローラーを使用する場合は、[抽出の検証]オプションのチェックを外すなど、さらに多くのオプションを設定できます。これにより、dacpacを作成できます。