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
应该是 14111990000015953 和 14111990000015952 但是当我在我的 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
我有一个 SQL 查询 return 客户的交易 header 使用客户的 card_number
。 SQL 查询将 return 一个名为 audit_number
的列。问题是当我使用 SSMS 软件执行 SQL 查询时,查询 return 的正确结果,但是当我在我的 Node JS 脚本上执行查询时,一些 audit_number
是错误的.
audit_number
应该是 14111990000015953 和 14111990000015952 但是当我在我的 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