将TFS 2018集合附加到Azure DevOps Server 2022时遇错误求助
核心错误定位
错误根源是SQL Server执行prc_SaveFile存储过程时,参数2的数据类型与格式规范不匹配(SQL错误码2786),触发于升级过程中的「Update Process Templates」步骤。
具体解决步骤
检查数据库兼容性级别
确保迁移后的TFS数据库在SQL Server 2019上的兼容性级别设置为**SQL Server 2016 (130)**或更高(Azure DevOps Server 2022要求最低130)。执行以下SQL命令确认并修改:-- 查看兼容性级别 SELECT name, compatibility_level FROM sys.databases WHERE name IN ('Tfs_Configuration', 'Tfs_CollectionName'); -- 修改兼容性级别(替换数据库名) ALTER DATABASE [Tfs_Configuration] SET COMPATIBILITY_LEVEL = 130;验证数据库迁移完整性
确认TFS数据库备份还原过程无损坏:- 对所有TFS相关数据库运行DBCC CHECKDB命令,检查是否存在一致性错误:
DBCC CHECKDB ([Tfs_Configuration]) WITH NO_INFOMSGS, ALL_ERRORMSGS; - 确保还原时使用了
WITH RECOVERY选项,数据库处于可用状态。
- 对所有TFS相关数据库运行DBCC CHECKDB命令,检查是否存在一致性错误:
检查SQL Server区域设置与排序规则
确认SQL Server 2019的区域设置、排序规则与原TFS 2018使用的SQL Server一致。若排序规则不同,可能导致字符串参数类型解析异常:- 查看实例排序规则:
SELECT SERVERPROPERTY('Collation'); - 查看数据库排序规则:
SELECT name, collation_name FROM sys.databases WHERE name IN ('Tfs_Configuration', 'Tfs_CollectionName');
若不一致,需重新迁移数据库至匹配排序规则的SQL实例,或使用ALTER DATABASE修改数据库排序规则(注意:修改数据库排序规则需谨慎,可能影响现有数据)。
- 查看实例排序规则:
手动排查存储过程参数问题
直接查看prc_SaveFile存储过程第205行的参数定义:- 在SQL Server Management Studio中找到Tfs_Configuration数据库,展开「可编程性」→「存储过程」→找到
prc_SaveFile,查看其定义。 - 检查第205行附近的参数使用,确认是否存在参数类型不匹配(例如:将字符串传入数值类型参数,或反之)。
- 若发现明显的参数类型错误,可临时修改存储过程参数类型匹配预期,完成升级后再恢复(不建议长期修改系统存储过程,仅作为临时修复手段)。
- 在SQL Server Management Studio中找到Tfs_Configuration数据库,展开「可编程性」→「存储过程」→找到
尝试跳过模板更新临时升级
若上述方法无效,可尝试在升级时临时跳过Process Templates更新步骤(需谨慎操作,升级完成后需手动同步模板):- 找到Azure DevOps Server安装目录下的servicing配置文件(通常在
C:\Program Files\Azure DevOps Server 2022\Tools\Deploy\Servicing\StepGroups)。 - 找到包含「UpdateProcessTemplates」步骤的配置文件,注释掉对应步骤,完成升级后再重新运行模板更新。
- 找到Azure DevOps Server安装目录下的servicing配置文件(通常在
重新安装Azure DevOps Server前端
确认前端服务器的Azure DevOps Server 2022安装包完整,无损坏。卸载当前安装,重新下载官方安装包并执行自定义安装,确保选择与数据库匹配的配置选项。
内容的提问来源于stack exchange,提问作者Lephas

