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

TediousJS使用newBulkLoad方法时报连接未设置排序规则错误如何解决

报错具体含义

该报错本质是TediousJS与SQL Server建立当前连接时,未成功获取到服务端返回的排序规则(collation)配置。由于newBulkLoad批量插入操作要求所有字符类型字段必须有明确的排序规则,来处理字符编码、排序比较等逻辑,当你传入空值给字符类型字段时,Tedious无法匹配到对应的排序规则标记,就会触发该异常。你代码中直接传递TYPES.Null作为值的写法,也会放大该问题的出现概率。

可行解决方案
  • 方案1:创建连接时全局显式指定排序规则
    初始化Connection实例时,在配置项的options中添加collation字段,值填写你的SQL Server实例实际使用的排序规则即可,中文环境常用Chinese_PRC_CI_AS,英文环境常用SQL_Latin1_General_CP1_CI_AS。
    代码示例:

    const { Connection } = require('tedious');
    const connection = new Connection({
      server: '数据库服务地址',
      authentication: {
        type: 'default',
        options: {
          userName: '数据库账号',
          password: '数据库密码'
        }
      },
      options: {
        collation: 'Chinese_PRC_CI_AS', // 新增该行配置
        database: '目标数据库名',
        trustServerCertificate: true
      }
    });
    
  • 方案2:给BulkLoad的字符类型列单独指定排序规则
    如果不想修改全局连接配置,可以在定义批量插入的列时,单独给所有字符类型(VarChar/NVarChar/Char等)的列添加collation属性,仅对当前批量插入任务生效。
    代码示例:

    const bulkLoad = connection.newBulkLoad('目标表名', (err, count) => {
      // 批量插入结果回调逻辑
    });
    // 定义列时指定排序规则
    bulkLoad.addColumn('字段1', TYPES.NVarChar, {
      length: 100,
      nullable: true,
      collation: 'Chinese_PRC_CI_AS' // 新增该行配置
    });
    
  • 方案3:替换TYPES.Null为JS原生null值
    你代码中传入的TYPES.Null是类型标记,并非实际空值,Tedious解析该标记时无法关联到对应列的排序规则配置,直接替换为JS原生null即可,修改后的行插入代码:

    bulkLoad.addRow(null, col2, col3, col4, col5, null, col7, 
                    col8, col9, null, null, null);
    
  • 方案4:确保连接建立完成后再执行批量插入逻辑
    若在connection.connect的回调触发前就初始化BulkLoad、添加行,连接还未完成和服务端的协商获取排序规则,也会触发该报错。将所有批量插入相关逻辑放到连接建立成功的回调中执行即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:24:07