web-dev-qa-db-fra.com

Annotation de longueur de la classe de la propriété persistante

J'essaie de déployer un projet SSDT à l'aide de SQLPackage.exe utilitaire. Je reçois l'erreur suivante (en allemand):

Fehler bei der erstellung des bereitstellungsplans. Die BereItStellung Kann Nicht Fortgesetzt Werden. Die Property-Klasse Longueur IST Nicht in der Element- ANNOTATION ANNOTATION-KLASSE PERSISTEDRESOLVABLEANNOTATION ENDALTEN.

Cela signifie qc. aimer:

Erreur lors de la création de plan de déploiement. Le déploiement ne peut pas continuer. La longueur de la classe de la propriété n'est pas incluse dans l'élément ou la classe d'annotation persistedresolvableannotation.

Je ne pouvais pas trouver beaucoup d'informations sur "persistedresolvableNotation". Mais j'ai réalisé que cela est inclus dans le modèle.xml dans le DACPAC.

Il contient une poignée de sqllogins définie similaire à celle-ci:

<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>

Angela (et les autres candidats) n'existent pas sur le serveur de destination comme connexion, bien qu'ils soient des utilisateurs de bases de données enregistrés dans la DB cible. Je m'attendrais à une autre erreur - si cela est inutile.

La base de données Le projet est basé sur une très vieille vérification SQL Server. Est-il possible qu'il s'agisse d'une fonctionnalité/syntaxe ou une propriété obsolète provenant de la version SQL Server et n'est tout simplement pas prise en charge? Est-ce que quelqu'un sait plus de détails?

7
Magier

J'ai trouvé le problème moi-même. Je vais le documenter au cas où quelqu'un d'autre est confronté à la question à l'avenir.

La définition de l'utilisateur suivant:

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

créé le code suivant dans le modèle.xml qui évite la publication, peut-être parce que le schéma (Angela) utilisé il est invalide car il n'existe tout simplement pas:

<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>

Après avoir changé la définition de l'utilisateur sur:

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

le modèle cherche comme suit et pourrait être publié:

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

J'ai le sentiment que ce comportement étrange est un suivi d'un autre comportement erroné, car je m'attendrais à ce que le schéma n'existant pas augmente une erreur de compilateur.

7
Magier

Pour moi, la solution était que j'utilisais une version obsolète de sqlpackage.exe.

Version ancienne voie:

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

Nouvelle version de la version:

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

Il est installé par Outils de données Microsoft SQL Server (SSDT) .

2
umbyersw