web-dev-qa-db-ja.com

プロパティクラス長さ注釈PersistedResolvableAnnotation

Sqlpackage.exeユーティリティを使用してssdtプロジェクトをデプロイしようとしています。次のエラーが表示されます(ドイツ語):

Fehler bei der Erstellung des Bereitstellungsplans。 Die Bereitstellung kann nicht fortgesetzt werden。 Die Property-Klasse Length ist nicht in der Element- oder Annotation-Klasse PersistedResolvableAnnotation enthalten。

Sthを意味します。お気に入り:

デプロイメントプランの作成中にエラーが発生しました。展開を続行できません。プロパティクラスの長さは、要素または注釈クラスPersistedResolvableAnnotationに含まれていません。

「PersistedResolvableAnnotation」に関する情報があまり見つかりませんでした。しかし、私はそれがdacpacのmodel.xmlに含まれていることに気付きました。

これには、次のように定義されたSqlLoginsがいくつか含まれています。

<Element Type="SqlUser" Name="[Angela]">
            <Property Name="IsWithoutLogin" Value="True" />
            <Relationship Name="DefaultSchema">
                <Entry>
                    <References Name="[Angela]" Disambiguator="8" />
                    <Annotation Type="**PersistedResolvableAnnotation**" Name="[Angela]">
                        <Property Name="TargetTypeStorage" Value="SqlSchema" />
                        <Property Name="Length" Value="8" />
                        <Property Name="Offset" Value="62" />
                    </Annotation>
                </Entry>
            </Relationship>
        </Element>

アンジェラ(および他の候補者)はターゲットサーバーに登録されたデータベースユーザーですが、ログインとして宛先サーバーに存在しません。この役に立たないものよりも、もしあれば、別のエラーが予想されます。

プロジェクトのデータベースは、かなり古いSQL Serverバージョンに基づいています。これは、SQL Serverバージョンからの非推奨の機能/構文またはプロパティであり、単にサポートされていない可能性がありますか?誰かが詳細を知っていますか?

7
Magier

私は自分で問題を見つけました。他の誰かが将来問題に直面している場合に備えて、それを文書化します。

次のユーザー定義:

CREATE USER [Angela] WITHOUT LOGIN
    WITH DEFAULT_SCHEMA = [Angela];

は、発行を回避する次のコードをmodel.xmlに作成しました。おそらくそこで使用されているスキーマ(Angela)は、単に存在しないため無効です。

<Element Type="SqlUser" Name="[Angela]">
            <Property Name="IsWithoutLogin" Value="True" />
            <Relationship Name="DefaultSchema">
                <Entry>
                    <Annotation Type="PersistedResolvableAnnotation" Name="[Angela]">
                        <Property Name="TargetTypeStorage" Value="SqlSchema" />
                        <Property Name="Length" Value="9" />
                        <Property Name="Offset" Value="63" />
                    </Annotation>
                </Entry>
            </Relationship>
        </Element>

ユーザー定義を次のように変更した後:

CREATE USER [Angela] WITHOUT LOGIN
    WITH DEFAULT_SCHEMA = [dbo];

モデルは次のように見え、公開できます。

<Element Type="SqlUser" Name="[Angela]">
        <Property Name="IsWithoutLogin" Value="True" />
    </Element>

この奇妙な動作は、既存のスキーマではコンパイラエラーが発生すると予想されるため、別の誤動作のフォローアップのようなものだと感じています。

7
Magier

私にとっての解決策は、古いバージョンのSqlPackage.exeを使用していたことです。

古いバージョンのパス:

C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\SqlPackage.exe

新しいバージョンパス:

C:\Program Files (x86)\Microsoft SQL Server\130\DAC\bin\SqlPackage.exe

Microsoft SQL Server Data Tools(SSDT) によってインストールされます。

2
umbyersw

私たちにとって、これはビルドサーバーにVisual Studio 2015をインストールしたことが原因でした。

私は this link の答えの1つにある手順を実行しました

この件についてお問い合わせいただきありがとうございます。ときどき、model.xmlファイルの形式を変更する必要があります。これが発生した場合は、更新されたバージョンのSqlPackage.exeをインストールして、改訂された形式を読み取れるようにする必要があります。ダウンロードはここから入手できます: https://www.Microsoft.com/en-us/download/details.aspx?id=51238

また、SqlPackageの新しいバージョンを利用する

C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\130\sqlpackage.exe

1
nebffa