And*_*ett 9 sql-server temporal sql-server-data-tools visual-studio-2015 sql-server-2016
寻找解决方法:
Error: SQL71609: System-versioned current and history tables do not have matching schemes. Mismatched column: 'XXXX'.
Run Code Online (Sandbox Code Playgroud)
尝试在SSDT中为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
Run Code Online (Sandbox Code Playgroud)
(假设[history]在SSDT中正确创建了模式).这是第一次建立良好.
如果我以后做出改变:
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
Run Code Online (Sandbox Code Playgroud)
然后构建失败并显示上面的错误消息.对数据类型,长度,精度或比例的任何更改都将导致此错误.(包括改变从VARCHAR到CHAR和VARCHAR(50)到VARCHAR(51);改变NOT NULL到NULL.不产生错误)做一个Clean不解决的事情.
我目前的解决方法是确保将最新版本签入源代码控制,然后打开SQL Server对象资源管理器,展开Projects - XXXX文件夹并导航到受影响的表,然后将其删除.然后我必须从源代码控制中恢复代码(SSDT删除).这个程序既乏味又危险,而不是我想要做的事情.
有没有人找到解决这个问题的方法?这是一个错误吗?
我正在使用Microsoft Visual Studio Professional 2015,版本14.0.25431.01更新3与SQL Server数据工具14.0.61021.0.
Ste*_*een 10
我可以重现这个问题.我们(SQL Server工具团队)将努力在未来版本的SSDT中修复此问题.与此同时,我相信您可以通过显式定义历史表(即将历史表及其所需的模式添加到项目中)来解决此问题,然后手动保持当前和历史表的模式同步.
如果在显式定义历史表时遇到问题,请尝试关闭Visual Studio,删除项目根目录中的DBMDL文件,然后重新打开项目.
| 归档时间: |
|
| 查看次数: |
2129 次 |
| 最近记录: |