sql - 列数更改时将数据插入SQLite表的动态方法

标签 sql sqlite

我正在使用SQLite处理脚本,其中可插入要创建的表中的列数会不断变化,以后再进行联接。

我创建用来向其中插入数据的表有97列,从我的供稿中输入的数据范围从80一直到第97列。

我得到的错误是SQLITE_ERROR: table allPositionsTable has 97 columns but 80 values were supplied,这是我试图通过找出一种不会发生的方式来避免的错误。

我是否可以使用任何变通方法或技巧来拥有SQLite函数,以使其始终包含没有数据的列或动态不包含它们的列,从而使错误消失?

最佳答案

我得到的错误是SQLITE_ERROR: table allPositionsTable has 97 columns but 80 values were supplied,这是我正在尝试的错误
通过找出不会发生这种情况的方法来避免。


发生这种情况是因为您使用的是默认列列表(即未指定要放置值的列)

那就是您将编码INSERT INTO your_table VALUES(.......的等效项
因此,在没有列列表的情况下,您要说的是您将为表中的所有列提供值,因此当不存在一个或多个值时会显示消息。

您要使用INSERT INTO your_table_name (your_comma_separated_list_of_columns_to_be_inserted) VALUES(.......


其中your_table_name和your_comma_separated_list_of_columns_to_be_inserted将被替换为适当的值。


请参见INSERT语法的突出显示部分,该部分可在SQL As Understood By SQLite - INSERT中找到

enter image description here

并且上面链接中的相应部分是:


第一种形式(带有“ VALUES”关键字)创建一个或多个新表单
现有表中的行。

如果表名后面的列名列表是
省略,则插入每一行的值的数量必须为
与表中的列数相同。

在这种情况下,
评估VALUES列表中每一项的最左边的表达式
被插入到每个新行的最左列,依此类推
对于每个后续表达式。

如果指定了列名列表,
那么“值”列表的每个术语中的值数必须匹配
指定的列数。

新的每个命名列
该行填充有评估相应结果的结果
VALUES表达式。

未出现在列列表中的表列
使用默认列值填充(指定为
CREATE TABLE语句),如果没有默认值,则为NULL
指定。

关于sql - 列数更改时将数据插入SQLite表的动态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55007800/

相关文章:

sql - 使用计算的时间戳设置 "VALID UNTIL"值

android - 将 SQL Server 查询更改为 SQLite 中的等效查询

android - 选择 * 从 0 < 0

python - sqlite3.操作错误: near ",": syntax error

mysql - 如何连接 5 个不同表中的记录?

javascript - 从查询中传递模态 ID,以便它可以在另一个查询中使用

sqlite - 将 sql-server *.mdf 文件转换为 sqlite 文件

android sqlite 双向同步 sqlite

sql - 请帮助我理解为什么 MySQL 调用无效

php - 如何在php上获取正确的sql值