修改TFS中时态表列名/类型遇SQL71609错误求解决方案
解决SQL71609:时态表当前表与历史表Schema不匹配的问题
嘿,我之前处理过不少SSDT结合时态表的问题,针对你用VS2017 Enterprise(15.71.1)+ SSDT 15.1.61804.210 + TFS的场景,这几个方法应该能帮你搞定这个报错:
方法一:手动同步历史表后重新启用系统版本控制
旧版本的SSDT对时态表的自动同步支持确实有bug,你可以按这个步骤来:
- 先打开项目里的时态表脚本,把
SYSTEM_VERSIONING = ON (HISTORY_TABLE = [你的架构].[历史表名])这段注释掉,暂时关闭系统版本控制 - 修改你需要调整的列(不管是类型还是名称),确保当前表的脚本改对了
- 找到对应的历史表脚本,手动更新它的对应列,保证和当前表的列完全一致——包括列名、数据类型、长度、是否允许为空这些细节,一点都不能差
- 把之前注释的系统版本控制语句恢复,重新开启动态版本功能
- 现在再试试构建,应该就能通过了
方法二:调整项目的验证设置
有时候项目的严格验证会触发这个错误,你可以临时调整下:
- 右键你的数据库项目 → 选「属性」→ 切换到「SQL Server 验证」标签页
- 找到和「时态表验证」相关的选项,把它改成「警告」或者暂时禁用(注意只是临时用,长期还是要开着保证schema正确性)
- 保存设置后重新构建项目
方法三:升级SSDT版本
你用的SSDT 15.1.x版本确实比较老,微软在后续更新里修复了好多时态表的问题,建议试试升级:
- 打开VS2017,点「工具」→「获取工具和功能」
- 在安装界面里找到「数据存储和处理」下的SQL Server Data Tools,选最新的兼容版本(VS2017的SSDT最高能更到17.x左右)
- 更新完重启VS,再去修改列试试
方法四:通过TFS变更集排查修复
如果上面的方法都不行,可能是之前的变更导致历史表和当前表脱节了:
- 去TFS里查这个表的历史变更集,看看有没有哪次修改没同步历史表
- 手动写脚本把历史表的结构修正成和当前表完全匹配
- 把修正后的历史表脚本提交到TFS,再重新构建
划重点:时态表对当前表和历史表的一致性要求极高,任何一点差异(哪怕是列的顺序不对!)都会触发SQL71609,所以修改时一定要仔细核对两者的schema。
内容的提问来源于stack exchange,提问作者Anunaya Mishra
相关产品推荐
相关产品推荐

