0

插入数据时如何获取主键值并将其放入另一列?

这是我的表架构:

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')

谢谢!

4

4 回答 4

2

不要那样做。你走这条路违反了各种良好的数据库设计原则。主键应该代表唯一标识元组(行)的数据。当您开始拥有主键的多个副本时,您反过来又破坏了键的整个目的。

于 2013-10-24T19:59:47.880 回答
0

据我所知,您正在尝试基于PK. 就像我的PK = 1那样,您需要一个自定义 ID 作为ABCDEF/000/1. 因此,在这种情况下,您必须选择Id插入查询的立即生成,然后在触发器中或在插入语句之后运行更新语句。由于它是 sql lite,因此您需要进行一些研究以获取类似于 Sql Server 中的 Scope_Identity() 或 @@Identity 的身份。

于 2013-10-25T07:53:15.483 回答
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;
于 2013-10-25T07:45:13.700 回答
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', ...)
于 2013-10-24T21:11:13.360 回答