目标数据库中没有列,但出现“架构更新正在终止,因为可能会发生数据丢失”

Posted

技术标签:

【中文标题】目标数据库中没有列,但出现“架构更新正在终止,因为可能会发生数据丢失”【英文标题】:No column in target database, but getting "The schema update is terminating because data loss might occur" 【发布时间】:2021-08-22 17:21:21 【问题描述】:

我在发布 SQL 项目时遇到了错误。

我正在使用一些测试数据在由生产模式创建的数据库上进行测试。

当我在 Visual Studio 的“数据工具操作”选项卡中查看错误时,我看到了:

/*
The column [dbo].[MyTableName].[UnexpectedColumnName] is being dropped, data loss could occur.
*/
IF EXISTS (select top 1 1 from [dbo].[MyTableName])
    RAISERROR (N'Rows were detected. The schema update is terminating because data loss might occur.', 16, 127) WITH NOWAIT
GO

但是,UnexpectedColumnName 列名已经很长时间没有出现在该表中了。

问题是为什么要生成该 SQL。

【问题讨论】:

【参考方案1】:

所以事实证明重构日志中有一些非常古老的东西。我要求发布步骤生成脚本而不是立即发布并搜索UnexpectedColumnName

GO
PRINT N'The following operation was generated from a refactoring log file 69ad6ffa-f53e-4302-a9af-a6f6907e4eec, 5879552a-9f2d-439c-82c8-352bbee08bb2';
PRINT N'Rename [dbo].[MyTableName].[ArbitraryRealColumnName] to UnexpectedColumnName';

GO
EXECUTE sp_rename @objname = N'[dbo].[MyTableName].[ArbitraryRealColumnName]', @newname = N'UnexpectedColumnName', @objtype = N'COLUMN';

然后我查看了重构日志,发现它与 GUID 匹配:

  <Operation Name="Rename Refactor" Key="5879552a-9f2d-439c-82c8-352bbee08bb2" ChangeDateTime="02/13/2020 20:07:08">
    <Property Name="ElementName" Value="[dbo].[MyTableName].[NotSureWhatThisIs]" />
    <Property Name="ElementType" Value="SqlSimpleColumn" />
    <Property Name="ParentElementName" Value="[dbo].[MyTableName]" />
    <Property Name="ParentElementType" Value="SqlTable" />
    <Property Name="NewName" Value="UnexpectedColumnName" />
  </Operation>

因为我们不使用那些重构日志功能,所以我只是删除了整个重构日志,一切正常。我想你也可以删除错误的重命名。

【讨论】:

以上是关于目标数据库中没有列,但出现“架构更新正在终止,因为可能会发生数据丢失”的主要内容,如果未能解决你的问题,请参考以下文章

使用动态目标列进行查询

Pandas 按行中的值和其他列中的值在行之间进行差异

如何用多次出现的模式填充 varchar

如何显示 c3.js 没有数据,但有空列的图例?

Excel 目标没有输入列

SQLAlchemy ORM:“AttributeError:无法在行中找到列”