MSSQL Returns SSMS 和 Node JS 脚本中的不同结果

MSSQL Returns Different result in SSMS and Node JS script

我有一个 SQL 查询 return 客户的交易 header 使用客户的 card_number。 SQL 查询将 return 一个名为 audit_number 的列。问题是当我使用 SSMS 软件执行 SQL 查询时,查询 return 的正确结果,但是当我在我的 Node JS 脚本上执行查询时,一些 audit_number 是错误的.

audit_number 应该是 1411199000001595314111990000015952 但是当我在我的 NODE JS 脚本中执行查询时 audit_number 变成 14111990000015952.

这是我的 sql 查询

SELECT
h.Log_trxdate AS trx_date, 
CAST(h.log_audit AS varchar) AS audit_number,  
h.currency_code  
FROM log_header h  
WHERE h.id_code = '10000010055919' --card_number

这是我的 Node JS 脚本

var querySQL = " SELECT  ";
querySQL = querySQL + " h.Log_trxdate AS trx_date, ";
querySQL = querySQL + " CAST(h.log_audit AS varchar) AS audit_number, ";
querySQL = querySQL + " FROM log_header h ";
querySQL = querySQL + " WHERE h.id_code = 10000010055919 ";

sql.connect(config, function (err) {
    var req = new sql.Request();
    req.query(querySQL, function (err, result) {
    console.log(result);        
    });
});

您需要将数据类型 number 更改为 varchar/text,因为在 javascript 中,如果数字长度超过 16 位,那么它会给您一些随机数。

So to get exact result you should change your Datatype from number to string.

For example if you check number
Number(1111111111111111)//16 digits

Result is 1111111111111111

But if you put Number(11111111111111111)//17 digits
then result will be 11111111111111112 something