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

为何SSMS查询设计器自动添加COLLATE SQL_Latin1_General_CP1_CI_AS?

SSMS查询设计器自动添加COLLATE子句与别名的解决办法

问题场景

上周起,使用SSMS查询设计器构建查询时,部分列被自动追加COLLATE SQL_Latin1_General_CP1_CI_AS并强制设置别名(如Expr1、Expr2)。此前近两个月未出现该问题,仅修改过显示行号设置,恢复默认设置后问题仍存在。

初始可正常运行的查询:

SELECT TOP (1000) [site_ref]
      ,[trans_num]
      ,[acct]
      ,[trans_date]
      ,[dom_amount]
      ,[ref]
      ,[vend_num]
      ,[voucher]
  FROM [dbo].[ledger_mst]

经查询设计器转换后变为:

SELECT TOP (1000) site_ref COLLATE SQL_Latin1_General_CP1_CI_AS AS Expr1, trans_num, acct COLLATE SQL_Latin1_General_CP1_CI_AS AS Expr2, trans_date, dom_amount, ref COLLATE SQL_Latin1_General_CP1_CI_AS AS Expr3, 
                  vend_num COLLATE SQL_Latin1_General_CP1_CI_AS AS Expr4, voucher COLLATE SQL_Latin1_General_CP1_CI_AS AS Expr5
FROM     dbo.ledger_mst

解决步骤

1. 调整查询设计器冲突解决设置

打开SSMS,依次进入工具 → 选项 → 查询设计器 → SQL Server查询设计器,取消勾选以下两个选项:

  • 自动解决排序规则冲突
  • 自动解决类型转换冲突

修改后重启SSMS,再测试查询设计器的行为。

2. 重置SSMS用户配置

若上述设置无效,可能是用户配置文件损坏:

  • 关闭所有SSMS窗口
  • 打开命令提示符,执行:
devenv.exe /resetuserdata

注意:该操作会重置SSMS所有自定义设置(包括布局、快捷键等),操作前可备份必要配置。

3. 检查列与数据库的排序规则一致性

查询设计器自动添加COLLATE通常是因为列的排序规则与数据库/服务器默认规则存在冲突。可通过以下SQL查看目标列的排序规则:

SELECT 
    name AS column_name,
    collation_name
FROM sys.columns
WHERE object_id = OBJECT_ID('dbo.ledger_mst')
AND name IN ('site_ref','acct','ref','vend_num','voucher');

若列排序规则与数据库默认规则不一致,可根据业务需求统一排序规则(需注意数据兼容风险)。

4. 修复或重装SSMS

如果以上方法均无效,可能是SSMS安装文件损坏:

  • 打开控制面板的程序和功能,找到Microsoft SQL Server Management Studio
  • 选择更改 → 修复,完成后重启SSMS
  • 若修复无效,可卸载后重新安装对应版本的SSMS

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 02:36:14