You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改SQL Server默认排序规则后sys.all_columns查询报错求解决

解决SQL Server修改系统排序规则后sys.all_columns排序冲突问题

问题根源

你遇到的问题是修改系统排序规则后,sys.system_components_surface_area_configuration视图的底层关联对象中,部分列仍保留旧的Arabic_CI_AS排序规则,与新的系统默认排序规则SQL_Latin1_General_CP1_CI_AS在等值比较时产生冲突,而sys.all_columns依赖该视图,最终导致查询报错、新建数据库无法打开Tables文件夹。

解决方案

1. 先确认视图冲突细节

执行以下命令查看sys.system_components_surface_area_configuration的定义,定位具体的冲突关联逻辑:

EXEC sp_helptext 'sys.system_components_surface_area_configuration';

输出的SQL中,会看到引发冲突的等值比较行,通常是两个不同排序规则的列直接做JOIN或WHERE条件。

2. 优先尝试刷新系统视图(推荐)

这是最安全的修复方式,通过SQL Server内置命令同步视图与系统排序规则:

  1. 关闭SQL Server服务,以单用户模式重新启动:
sqlservr -m -s"MSSQLSERVER"
  1. 用SSMS或sqlcmd连接到实例,依次执行:
-- 修复master库的系统对象
DBCC CHECKDB (master) WITH REPAIR_REBUILD;

-- 刷新冲突视图和依赖它的sys.all_columns
EXEC sp_refreshview 'sys.system_components_surface_area_configuration';
EXEC sp_refreshview 'sys.all_columns';
  1. 关闭单用户模式的SQL Server,重新启动为正常多用户模式。

3. 手动修改视图定义(如果刷新无效)

如果刷新视图无法解决问题,需要手动修改视图的关联逻辑,统一指定排序规则:

  1. 继续在单用户模式下操作,先获取视图的完整定义(用第一步的sp_helptext结果)。
  2. 启用系统对象修改权限:
ALTER AUTHORIZATION ON SCHEMA::sys TO sa;
  1. 删除原视图:
DROP VIEW sys.system_components_surface_area_configuration;
  1. 创建修改后的视图,在所有冲突的等值比较处显式指定新排序规则,例如将:
JOIN sys.some_system_table st ON sc.col = st.col

修改为:

JOIN sys.some_system_table st ON sc.col COLLATE SQL_Latin1_General_CP1_CI_AS = st.col COLLATE SQL_Latin1_General_CP1_CI_AS

然后执行修改后的CREATE VIEW语句。
5. 恢复系统权限:

ALTER AUTHORIZATION ON SCHEMA::sys TO sys;

4. 验证修复结果

执行以下命令确认报错消失:

SELECT * FROM sys.all_columns;

再尝试新建数据库并打开Tables文件夹,验证功能恢复正常。

重要提醒

  • 操作前必须做好全库备份,包括系统数据库,防止操作失误导致数据损坏。
  • 单用户模式下操作时,确保没有其他应用或用户连接到SQL Server实例。
  • 修改系统视图属于非常规操作,优先使用刷新视图的方法。

内容的提问来源于stack exchange,提问作者Vajihe Jami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 18:12:37