如何将列设置为等于主键
本文关键字:于主键 设置 | 更新日期: 2023-09-27 18:36:50
插入
数据时如何获取主键值并将其放在另一列中?
这是我的表架构:
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')
谢谢!
不要那样做。 走这条路违反了各种好的数据库设计原则。 主键应该表示唯一标识元组(行)的数据。 当您开始拥有主密钥的多个副本时,您反过来又违背了密钥的整个用途。
正如Chris所建议的:
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;
据我所知,您正在尝试根据PK
生成一些自定义 Id。就像我的PK = 1
一样,你需要一个自定义 Id 作为ABCDEF/000/1
.因此,在这种情况下,您必须选择插入查询生成的即时Id
,然后在触发器中或插入语句之后运行更新语句。由于它的sql lite,所以你需要做一些研究,以获得类似于Scope_Identity()或@@Identity在SQL Server中的标识。
尝试这样的事情:
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', ...)