Comment notre database peut-elle provoquer l'échec de SqlPackage? (SQL72018)

Espérant que quelqu'un d'autre a rencontré cela, car Google ne renvoie que neuf résultats pour cette erreur! Informations sur SqlPackage semble encore un peu difficile.

Nous sums actuellement en train de migrer vers un environnement de deployment continu. Dans ce cadre, nous utilisons des projets de database pour stocker le schéma de database et le server de construction utilise SqlPackage.exe pour générer un script de mise à niveau en comparant le file .dacpac de chaque projet avec sa database de schémas associée.

Nous avons six bases de données jusqu'à présent (avec plus à venir) et elles fonctionnent toutes très bien, sauf une, ce qui renvoie l'erreur suivante lorsque SqlPackage est en train de modéliser la database 'cible':

Erreur SQL72018: Le triggersur n'a pas pu être importé mais un ou plusieurs de ces objects existent dans votre source.

La seule chose que nous pouvons penser est que c'est un problème avec la taille de la database cible; SqlPackage manque peut-être de memory? C'est le plus grand schéma de database que nous avons, donc c'est certainement faisable. Si c'est une limite de memory de SqlPackage, comment pouvons-nous l'augmenter?

Nous allons commencer à supprimer des objects de la database cible et du projet source pour voir si nous pouvons déterminer s'il s'agit d'une taille ou d'un object de schéma spécifique, mais des idées et des suggestions seraient grandement appréciées!

Mettre à jour

J'ai juste essayé de supprimer tous les triggersurs de la database cible, et maintenant il crache le script de mise à niveau sans erreurs. Ensuite, je vais essayer de retirer seulement la moitié d'entre eux, et voir si je peux le réduire à un triggersur spécifique. Je soupçonne qu'il peut s'agir simplement de la taille du schéma, qui remonte à la question de memory SqlPackage.

D'accord .. a travaillé.

Nous avons traversé un process d'abandon des triggersurs jusqu'à ce que nous le réduisions à un seul triggersur qui causait l'erreur. Il s'avère qu'il y avait quelque chose qui ne va pas – il semble que ce soit destiné à être attaché à une table, mais il ne l'est pas (c'est-à-dire qu'il n'apparaît pas dans la list des sortingggers). Donc je suppose que cette corruption mineure a causé l'échec de SqlPackage.

Au cas où quelqu'un le findait utile, voici le script que j'ai utilisé pour supprimer des gammes de sortingggers, ce qui m'a aidé à find le coupable:

http://www.codeproject.com/Tips/662699/Drop-all-Triggers-belonging-to-any-schema-in-MS-SQ

Use ClaimsSqlPackageTest DECLARE @SQLCmd nvarchar(1000) DECLARE @Trig varchar(500) DECLARE @sch varchar(500) Declare @count int = 0 DECLARE TGCursor CURSOR FOR SELECT ISNULL(tbl.name, vue.name) AS [schemaName] , trg.name AS sortingggerName FROM sys.sortingggers trg LEFT OUTER JOIN (SELECT tparent.object_id, ts.name FROM sys.tables tparent INNER JOIN sys.schemas ts ON TS.schema_id = tparent.SCHEMA_ID) AS tbl ON tbl.OBJECT_ID = trg.parent_id LEFT OUTER JOIN (SELECT vparent.object_id, vs.name FROM sys.views vparent INNER JOIN sys.schemas vs ON vs.schema_id = vparent.SCHEMA_ID) AS vue ON vue.OBJECT_ID = trg.parent_id OPEN TGCursor FETCH NEXT FROM TGCursor INTO @sch,@Trig WHILE @@FETCH_STATUS = 0 BEGIN SET @SQLCmd = N'DROP TRIGGER [' + @sch + '].[' + @Trig + ']' If @count >= 155 AND @count <= 160 Begin EXEC sp_executesql @SQLCmd PRINT @SQLCmd End Set @count = @count + 1 FETCH next FROM TGCursor INTO @sch,@Trig END CLOSE TGCursor DEALLOCATE TGCursor