如何在插入数据时获取主键值并将其放在另一列中?
这是我的表架构:
CREATE TABLE IF NOT EXISTS [MyTable] (
[ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
[custom_ID] INTEGER NULL,
[Name] VARCHAR (200) NULL)
我到目前为止的查询是:
INSERT INTO MyTable (custom_ID, Name)
values (
' {Here I need to get the primary key value, and then put it in custom_ID} ',
'someName')
谢谢!
答案 0 :(得分:3)
不要那样做。通过这条路线你违反了各种良好的数据库设计原则。主键应该表示唯一标识元组(行)的数据。当您开始拥有主键的多个副本时,您反过来会破坏密钥的整个目的。
答案 1 :(得分:0)
尝试这样的事情:
insert [Order] (col1, col2, ...) values ('val1', 'val2', ...) -- Note: no ID is specified
declare @id int = scope_identity()
insert OrderDetail (order_id, col1, ...) values (@id, 'val1', ...)
答案 2 :(得分:0)
正如克里斯所说:
CREATE TRIGGER MyTable_CustomID AFTER INSERT ON MyTable WHEN NEW.Custom_ID=NULL BEGIN
UPDATE MyTable SET Custom_ID=NEW.Id WHERE ROWID=NEW.ROWID;
END;
答案 3 :(得分:0)
据我所知,您正在尝试根据PK
生成一些自定义ID。就像我的PK = 1
一样,您需要自定义ID为ABCDEF/000/1
。因此,在这种情况下,您必须通过insert查询选择立即Id
生成,然后在触发器中或在insert语句之后运行update语句。因为它的sql lite所以你需要进行一些研究以获得类似于Sql Server中的Scope_Identity()或@@ Identity的身份。