如何设置一个等于主键的列?

时间:2013-10-24 19:15:00

标签: c# sql sqlite

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

这是我的表架构:

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 个答案:

答案 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的身份。