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

SQL Server拼接动态SQL出现collate排序规则冲突报错如何解决

排序规则冲突报错解决方案

报错的核心原因是动态SQL拼接过程中,不同排序规则的varchar值执行+拼接操作时触发的校验失败:你写在单引号里的静态SQL片段排序规则,和ETL1.dbo.BI_GetSybaseIQDateExtent用户自定义函数返回的varchar值排序规则,分别对应SQL_Latin1_General_CP1_CI_AS和Latin1_General_CI_AS,二者不兼容导致报错。

修复方案

你之前尝试的collate写法错误,多了不必要的as关键字,collate语法后直接跟排序规则名称即可,以下是两种可行的修复方式:

方案1:在冲突的返回值后指定排序规则

直接修改动态SQL拼接的对应行,给函数返回值指定统一排序规则:

SET @SQL_STR = '
    SELECT
        A_REC,
        B_REC,
        CALL_SOURCE,
        CALL_DEST,
        A_NUM,
        B_NUM,
        DURATION,
        NETWORK,
        REC_TYPE
    FROM
        OPENQUERY(CDRGO_SYBASE_MEDIATION, ''
            SELECT
                a_rec,
                b_rec,
                call_source,
                call_dest,
                a_num,
                b_num,
                duration,
                network,
                rec_type
            FROM
                DE.BI_DATA
            WHERE
            ' + ETL1.dbo.BI_GetSybaseIQDateExtent(@startdate, @enddate, 'A') collate SQL_Latin1_General_CP1_CI_AS + '
        '') SV'

方案2:声明变量时统一指定排序规则(更省心)

直接修改@sql_str变量的声明语句,指定固定排序规则,后续所有赋值给该变量的字符串都会自动转换为对应排序规则,不需要再单独给每个拼接项加collate:

-- 替换原有的@sql_str声明行即可
DECLARE @sql_str VARCHAR (max) collate SQL_Latin1_General_CP1_CI_AS

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:36:02