每次发布失败时,假设它通过了预览生成,错误行和执行的脚本示例对于帮助我跟踪错误源完全没有用,因为行号是相对于最后一条GO
语句的,而执行的脚本没有' 总是出现在发布脚本中。
在这种情况下,它失败并出现以下错误:
发布脚本中不存在执行的脚本:
这是它在双击错误消息后在发布脚本中导航的位置:
通常我都能根据报错信息查到,但这次我一头雾水,因为我能想到的相关关键词太普通了,看起来没救了。
看起来日志记录是 hackish,错误有时会出现在部署后脚本之前(例如,表触发器在不完整的数据上执行,因为发布设置只包含禁用 DDL 触发器的选项)。
我试过在发布期间运行 SQL Server Profiler,但该工具忽略了更重要的调试信息(并且被我的大型数据库项目淹没了)。也许升级以获得 Extended Events Profiler 的另一个原因?
(我证实这个说法不是罪魁祸首)
我会
RAISERROR WITH NOWAIT
在每个正在执行的块开始时在部署后脚本中使用。通过这种方式,您应该能够看到部署在到达故障点之前进行了多远,并希望将其缩小到特定脚本。我倾向于构建我的 SSDT 项目的方式是,我有一个部署后脚本,然后使用 包含其他文件并用's
:r
分隔它们。GO
这让我有了一个理想的地方来插入RAISERRORS
以了解进展情况。或者,您应该将 粘贴RAISERROR
在每个包含文件的顶部。https://learn.microsoft.com/en-us/sql/t-sql/language-elements/raiserror-transact-sql?view=sql-server-2017链接中的关键点是:
抱歉 - 这是假设错误出现在您的部署后脚本中。重新阅读后我意识到你的错误似乎在此之前。