未处理的拒绝RequestError:nvarchar值'238998679919674'的转换溢出了一个int列

时间:2017-06-02 09:40:07

标签: sql-server node.js knex.js bookshelf.js tedious

我有'客户'表

enter image description here

和表'对话'

enter image description here

我是javascript的新手。目前,我尝试使用knex + bookshelf(带有繁琐驱动程序的SQL服务器数据库)来连接这两个表。我将这两个表分成两个模型并从路由器调用它(我使用Node js)。

  

conversation.js

customer: function() {
  return this.belongsTo('Customer','uniqueid');
}
     

customer.js

conversation: function(){
  return this.hasMany('Conversation','customer_id');
}

当我尝试将表格加入

Customer.fetchAll({withRelated:['conversation'], debug: true}).then(function(data{
  console.log('data : '+data);
});

不幸的是,我总是得到错误:

  

未处理拒绝RequestError:nvarchar值的转换   '238998679919674'溢出了一个int列。

我很好奇这个错误来自哪里?因为列的类型是nvarchar,而不是int。

调试的结果是

{ method: 'select',
  options: {},
  timeout: false,
  cancelOnTimeout: false,
  bindings: [],
  __knexQueryUid: '7befdc84-c66c-4278-b88c-d53a306c36db',
  sql: 'select [customers].* from [customers]' }
GET /ticket/list 500 16 - 21.899 ms
{ method: 'select',
  options: {},
  timeout: false,
  cancelOnTimeout: false,
  bindings: 
   [ 1,
     2,
     3,
     4,
     5,
     6,
     7,
     8,
     9,
     10,
     11,
     12,
     13,
     14,
     15,
     16,
     17,
     18,
     19,
     20,
     21,
     22,
     23,
     24,
     25,
     26,
     27,
     28,
     29,
     30,
     31,
     32,
     33,
     34,
     35,
     36,
     37,
     38,
     39,
     40,
     41,
     42,
     43,
     44,
     45,
     46,
     47,
     48,
     49,
     50 ],
  __knexQueryUid: '29ca9239-b7af-4765-95b1-836ed2c570ce',
  sql: 'select [conversations].* from [conversations] where [conversations].[customer_id] in (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' }

1 个答案:

答案 0 :(得分:0)

您尝试在客户ID上加入两个表,对吧?在第一个表(customers)中,id是int,在第二个customer_id中是nvarchar。将int连接到nvarchar时,nvarchar将转换为int,但int数据类型的最大可接受值为2,147,483,647,而conversations.customer_id列的值为“238998679919674”,无法转换为int,这就是错误所说的内容。 您可以尝试加入您的表格

customers.id = conversations.customer_id 

但是

cast(customers.id as nvarchar(255) = conversations.customer_id

但是存在一个逻辑错误:并非所有的conversations.customer_id都有相应的customers.id,所以联系可能都不正确