如何将列设置为等于主键

本文关键字:于主键 设置 | 更新日期: 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', ...)