1

我在 SqlServer 数据库中有一个简单的表,simSQLTable. 列标题是:

index, del_date, name

我在 MATLAB 中有一个表mytbl,只有一行:

num   deldate  myname
---   -------  ------
1     '07-02-2015 00:00:00.0'  'JenZ'

mycolnames = {'index', 'del_date', 'name'};

fastinsert这样使用:

fastinsert(conn, 'simSQLTable', mycolnames, mytbl);

但我收到此错误:

Error using database/fastinsert (line 90)
Variable fields and insert fields do not match.

如何解决这个问题?

4

2 回答 2

1

我认为这里的主要问题是列名mycolnames数据库表有关,而不是您的 MATLAB mytbl。它有自己的变量名,由 给出{'num' 'deldate' 'myname'},与数据库列名不匹配。从参数的fastinsert文档中data

要插入的数据,指定为数值矩阵、元胞数组、表、数据集数组或结构,其中包含要插入现有数据库表的所有数据tablename。如果data是结构,则结构中的字段名称必须匹配colnames。如果data是表或数据集数组,则表或数据集数组中的变量名称必须匹配colnames

为了解决这个问题,您可以修改表中的变量名称,使其与您的数据库列名称匹配:

mytbl.Properties.VariableNames = mycolnames;
fastinsert(conn, 'simSQLTable', mycolnames, mytbl);

或者您可以从需要插入的表中提取数据:

fastinsert(conn, 'simSQLTable', mycolnames, mytbl.Variables);
于 2017-09-18T20:22:09.160 回答
0

fastinsert查询数据库以获取列的数据类型。这会导致保留关键字出现问题。尝试`在 mySQL 或"Transact-SQL 中使用反引号来引用关键字index.

mysql:

mycolnames = {'`index`', 'del_date', 'name'}

事务处理 SQL:

mycolnames = {'"index"', 'del_date', 'name'}
于 2015-07-07T20:52:59.943 回答