Sqlite向表中添加部分值不起作用

时间:2014-08-20 20:53:45

标签: sql sqlite

我正在尝试以编程方式基于c#中的某些类生成表。我在类中使用了c#代码自动检测更改(在本例中为Missile),如果有任何属性更改,则更新表。

我正在使用的sqlite代码基于CJH's response类似的问题。

我添加了列stackLimit,这似乎导致了问题。

BEGIN TRANSACTION; 
CREATE TEMPORARY TABLE Missile_backup(itemName, description, itemType, itemSubType, itemSubType2, itemID, classID, missileSpeed, flightTime, cost, volume, mass); 
INSERT INTO Missile_backup SELECT itemName, description, itemType, itemSubType, itemSubType2, itemID, classID, missileSpeed, flightTime, cost, volume, mass FROM Missile;
DROP TABLE Missile; 
CREATE TABLE Missile(itemName, description, itemType, itemSubType, itemSubType2, stackLimit, itemID, classID, missileSpeed, flightTime, cost, volume, mass);    
INSERT INTO Missile SELECT itemName, description, itemType, itemSubType, itemSubType2, itemID, classID, missileSpeed, flightTime, cost, volume, mass FROM Missile_backup; 
DROP TABLE Missile_backup; 
COMMIT;

因此,每当我使用附加的stackLimit列创建新版本的导弹,并复制旧信息时,我都会收到错误:

table Missile has 13 columns but 12 values were supplied

他的榜样是不正确的?或者我错过了什么? 我想要做的就是在这里填充未指定的列(stackLimit),现在为null。

但是将来它可能是几列,它们需要为空,因此它需要是自动的。

由于

2 个答案:

答案 0 :(得分:2)

如果您不想插入所有列,则需要指定列列表:

INSERT INTO Missile (itemName, description, itemType, itemSubType, itemSubType2, itemID, classID, missileSpeed, flightTime, cost, volume, mass) 
SELECT itemName, description, itemType, itemSubType, itemSubType2, itemID, classID, missileSpeed, flightTime, cost, volume, mass FROM Missile_backup; 

否则,SQLite将如何知道要插入哪些列?在一般情况下,它不能依赖于匹配的名称。

答案 1 :(得分:0)

如果未指定列列表,则必须为所有列提供值:

INSERT INTO Missile SELECT ..., itemSubType2, NULL, itemID, ... FROM Missile_backup;