MSSQL在SSMS和节点JS脚本中返回不同的结果
我有一个SQL查询,使用客户的MSSQL在SSMS和节点JS脚本中返回不同的结果,sql,node.js,sql-server,ssms,Sql,Node.js,Sql Server,Ssms,我有一个SQL查询,使用客户的卡号返回客户的交易标题。SQL查询将返回一个名为audit\u number的列。问题是,当我使用SSMS软件执行SQL查询时,查询返回正确的结果,但是当我在我的节点JS脚本上执行查询时,一些audit\u number是错误的 audit_number应该是141119900000015953和141119900000015952,但是当我在我的节点JS脚本中执行查询时,这两个audit_number都变成141119900000015952 这是我的sql查
卡号
返回客户的交易标题。SQL查询将返回一个名为audit\u number
的列。问题是,当我使用SSMS软件执行SQL查询时,查询返回正确的结果,但是当我在我的节点JS脚本上执行查询时,一些audit\u number
是错误的
audit_number
应该是141119900000015953和141119900000015952,但是当我在我的节点JS脚本中执行查询时,这两个audit_number
都变成141119900000015952
这是我的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
这是我的节点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位,那么它会给您一些随机数
所以,为了得到准确的结果,您应该将数据类型从数字更改为字符串
数据库中的log_audit是什么数据类型?以及。。。。切勿使用
varchar
,请始终使用大小。。。。类似于varchar(20)
你可以发布一些javascript代码来复制这个吗?@Nick.McDermaid你可以在chrome开发工具控制台中查看它。放上数字(1111111111111)和数字(11111111111111)哇,这很有趣。所以它溢出了,只是给了你一个错误的数字?JavaScript是如此的神奇,但却充满了如此复杂的东西——所有语言都有优点和缺点:)
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