寻找解决方法:
Error: SQL71609: System-versioned current and history tables do not have matching schemes. Mismatched column: 'XXXX'.
尝试在SSDT for Visual Studio 2015中使用SQL 2016系统版本(时间)表时。
我已经定义了一个基本表:
CREATE TABLE [dbo].[Example] (
[ExampleId] INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
[ExampleColumn] VARCHAR(50) NOT NULL,
[SysStartTime] datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
[SysEndTime] datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime)
)
WITH (SYSTEM_VERSIONING=ON(HISTORY_TABLE=[history].[Example]))
GO
(假设在SSDT中正确创建了[history]
模式)。这是第一次建立良好。
如果我以后做出改变:
CREATE TABLE [dbo].[Example] (
[ExampleId] INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
[ExampleColumn] CHAR(50) NOT NULL, -- NOTE: Changed datatype
[SysStartTime] datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
[SysEndTime] datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime)
)
WITH (SYSTEM_VERSIONING=ON(HISTORY_TABLE=[history].[Example]))
GO
然后构建失败并显示上面的错误消息。对数据类型,长度,精度或比例的任何更改都将导致此错误。 (包括从VARCHAR
更改为CHAR
和VARCHAR(50)
更改为VARCHAR(51)
;将NOT NULL
更改为NULL
不会产生错误。)执行{ {1}}无法解决问题。
我目前的解决方法是确保将最新版本签入源代码控制,然后打开SQL Server对象资源管理器,展开Clean
文件夹并导航到受影响的表,然后将其删除。然后我必须从源代码控制中恢复代码(SSDT删除)。这个过程既乏味又危险,而不是我想做的事。
有没有人找到解决这个问题的方法?这是一个错误吗?
我使用Microsoft Visual Studio Professional 2015,版本14.0.25431.01 Update 3和SQL Server数据工具14.0.61021.0。
答案 0 :(得分:9)
我可以重现这个问题。我们(SQL Server工具团队)将努力在未来版本的SSDT中修复此问题。与此同时,我相信你可以通过显式定义历史表来解决这个问题(即将历史表及其所需的模式添加到项目中),然后手动保持当前和历史表的模式同步。
如果在显式定义历史记录表时遇到问题,请尝试关闭Visual Studio,删除项目根目录中的DBMDL文件,然后重新打开项目。
答案 1 :(得分:8)
我们刚刚遇到过这个问题。我们通过注释表的系统版本控制元素(有效地使其成为普通表)找到了一种解决方法,使用我们需要的架构更改(成功)构建项目,然后将系统版本控制线放回原位(也是成功)。
答案 2 :(得分:0)
以防万一有人遇到相同的问题:
解决方法是转到[YourDatabaseProject] / bin / Debug文件夹并清除它,然后在不删除任何内容的情况下进行构建。
希望这会有所帮助!