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

Azure Synapse无服务器SQL池数据库项目排序规则冲突求助

解决Azure Synapse Serverless SQL Pool架构对比排序规则冲突问题

问题根源

架构对比工具在构建源模型时,会读取master数据库的系统视图(比如sys.databases、sys.schemas),这些视图的列采用master默认的SQL_Latin1_General_CP1_CI_AS排序规则,而你的用户数据库及部署项目使用的是Latin1_General_100_BIN2_UTF8,两类元数据在UNION合并时触发了排序规则冲突。

可行解决方案

1. 配置数据库项目的SQLCMD变量与默认规则

在Visual Studio数据库项目中:

  • 右键项目 → 选择「属性」→ 切换到「SQLCMD变量」标签
  • 添加变量DefaultCollation,赋值为Latin1_General_100_BIN2_UTF8
  • 进入「数据库设置」标签,确认排序规则已设为目标规则,同时勾选「在生成脚本时使用默认排序规则」

2. 调整架构对比的筛选与规则选项

无论是Visual Studio还是Azure Data Studio的对比工具:

  • 启动对比前,打开「选项」设置
  • 在对象筛选中,排除master库的系统对象(如sys、information_schema下的所有对象)
  • 若有「忽略排序规则差异」选项,直接启用该功能

3. 显式指定对象级排序规则

对项目中创建的表、视图等对象,所有字符类型列显式声明排序规则,避免继承冲突:

CREATE TABLE dbo.Customer (
    CustomerID INT IDENTITY(1,1) PRIMARY KEY,
    CustomerName NVARCHAR(100) COLLATE Latin1_General_100_BIN2_UTF8 NOT NULL
);

4. 绕过架构对比,直接生成部署脚本

如果以上方法仍无效,直接用项目生成部署脚本执行:

  • 在Visual Studio中右键项目 → 「生成」,找到输出的.dacpac文件
  • 使用SqlPackage.exe生成指定排序规则的部署脚本:
SqlPackage.exe /Action:Script /SourceFile:YourLakehouseProject.dacpac /TargetConnectionString:"Server=tcp:<your-synapse-workspace>.sql.azuresynapse.net,1433;Database=<your-serverless-db>;Authentication=Active Directory Integrated;" /p:DefaultCollation=Latin1_General_100_BIN2_UTF8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 11:35:15