首页 > 解决方案 > 输出参数值超过限制字符时的繁琐打包(8000)

问题描述

我正在使用下面的存储过程输出参数,当值超过 8000 个字符时,该值将被截断。任何人都可以给我一些想法或指导如何解决这个问题?我看到有人说使用存储过程中设置的几个变量来取值。但问题是我不知道我们会收到多少 8000 个字符,它会远远超过 8000 个。

request.addOutputParameter('JSONOUTPUT1', TYPES.VarChar);
    request.addOutputParameter('JSONOUTPUT2', TYPES.VarChar);

    request.on('returnValue', (name, value, matadata)=>{
      result[name] = value; // if value is over 8000 characters will got truncated.
    });

对于正常的查询 sql 结果,我使用下面的代码来接收从 sql server 返回的数据:

request.on("row", columns => {
        result += columns[0].value; 
      });

上面我们从db中逐块读取数据的方式很完美!但是对于存储过程的输出,我似乎没有找到这种乏味的方式。

如果有人遇到类似问题并可以提供解决方案,我将提前表示感谢。

标签: javascriptsqlnode.jstedious

解决方案


对于任何面临以下相同错误的人,我最终是如何处理的:而不是使用 outputstoreprocedue 参数,而是使用查询。仍然逐行、逐块读取数据。

request.on("row", columns => {    
columns.forEach((column)=> {
result[column.metadata.colName] = column.value;
  })     
});
 request.on('requestCompleted', () => {
    connection.close();
    done(error, result);
  });
connection.execSql(request);

以下是查询:

const query = `DECLARE @json1 AS VarChar(MAX)
DECLARE @json2 AS VarChar(MAX)
EXEC dbo.[abc_storeprocedure]
@i_STORE_NBR = '${input1}', 
@jsonOutput1 = @json1 OUTPUT,
@jsonOutput2 = @json2 OUTPUT
SELECT @json1 as 'emailList'
SELECT @json2 as 'candidateList' `

仅供参考:在繁琐的 6.6.5 文本中已弃用


推荐阅读