我们的数据库怎么会导致SqlPackage失败?(SQL72018)

 ENE的蓝白胖次 发布于 2023-02-03 11:32

希望其他人遇到过此问题,因为Google只返回9个错误结果!有关SqlPackage的信息似乎还有点不足.

我们目前正在进行迁移到持续部署环境的过程.作为其中一部分,我们使用数据库项目来存储数据库模式,构建服务器使用SqlPackage.exe通过比较每个项目的.dacpac文件与服务器上托管的关联模式模板数据库来生成升级脚本.

到目前为止,我们有六个数据库(还有更多),除了一个之外它们都工作正常,当SqlPackage为'target'数据库建模时会抛出以下错误:

错误SQL72018:无法导入触发器,但源中存在一个或多个这些对象.

我们唯一能想到的是目标数据库的大小问题; 也许SqlPackage内存不足?它是我们拥有的最大的数据库模式,所以它当然是可行的.如果它是SqlPackage的内存限制,我们如何增加它?

我们将开始从目标数据库和源项目中删除对象,以查看我们是否可以确定它是否符合规模或特定架构对象,但同时我们将非常感谢任何想法和建议!

更新

我刚刚尝试从目标数据库中删除所有触发器,现在它将没有错误地吐出升级脚本.接下来我将尝试仅删除其中的一半,看看我是否可以将其缩小到一个特定的触发器.我怀疑它可能只是模式的大小,这可以追溯到SqlPackage内存问题.

1 个回答
  • 好的..解决了.

    我们经历了一个删除触发器的过程,直到我们将其缩小到导致错误的单个触发器.事实证明它有一些相当不对的东西 - 它似乎是附加到一个表,但不是(即它没有出现在触发器列表中).所以我猜这个小的腐败导致SqlPackage失败.

    如果有人发现它有用,这是我用来删除触发器范围的脚本,这帮助我找到了罪魁祸首:

    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 triggerName
    FROM sys.triggers 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
    

    2023-02-03 11:33 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有