如何为特定的新主键记录插入默认值记录?

Posted

技术标签:

【中文标题】如何为特定的新主键记录插入默认值记录?【英文标题】:How to insert default values record for a specific new primary key record? 【发布时间】:2012-03-27 16:32:51 【问题描述】:

我有一个名为 myTable 的表,其中包含几列,其中一些列有默认值,而对于其余列,NULL 是一个可能且可接受的值。

有一个名为 pkVariable 的主键,其余列名为 column2、column3、column4 和 column5。 column2 和 column3 配置为分别获取默认值 0 和 1,并配置为 NOT NULL。 column4 和 column5 没有默认值,但它们可能设置为 NULL 值。

我的问题是,如何将新的“空”记录插入 myTable.我的意思是,我想在 myTable 中的新记录中包含主键值、column2 和 column3 的默认值以及 column4 和 column5 的 NULL 值。

如果 pkVariable 有默认值或者是 IDENTITY,我可以这样做:

INSERT INTO myTable DEFAULT VALUES;

我买不到,因为 pkVariable 必须在 INSERT 子句中获取 pkValue。

我可以使用:

INSERT INTO myTable VALUES (pkValue, DEFAULT, DEFAULT, DEFAULT, DEFAULT);

它有效,但我不想依赖于列数。

因此,实现我的目标的正确语法是什么?

我错误地认为我可以做到:

INSERT INTO [myTable] ([pkVariable]) VALUES (pkValue) DEFUALT VALUES;

并想到了这个方向:

WITH pkVariable = pkValue
INSERT INTO [myTable] DEFAULT VALUES;

还有其他建议吗?

【问题讨论】:

【参考方案1】:

不要在插入中包含您希望默认的列。如果不包含列,它将使用默认值。

MYTABLE
-PKColumn IDENTITY(1,1)
-Column1 VARCHAR DEFAULT 'ColumnValue'
-Column2 INT

那么,你需要做的就是:

INSERT INTO MYTABLE (Column2) VALUES (123);

该行将插入为

1|'ColumnValue'|123

注意所有默认值是如何插入的

【讨论】:

【参考方案2】:

如果您的所有列都允许空值或具有默认值,并且您不想在插入时指定任何值,请尝试以下操作:

drop table #test
create table #test (id int identity, test varchar(10) default 'test' not null, 
                    test2 varchar (10) null, test3 int default 1 not null)

insert into #test (test)
values (default)

select * from #test

【讨论】:

【参考方案3】:

使用以下命令为您的 PK ID 列使用序列

nextval('[name of your sequence]'::regclass)

然后你可以用INSERT AS SELECT [whatever]插入

【讨论】:

【参考方案4】:

如果您想说要输入具有特定主键的记录,请使用它。

set identity_insert mytable on
insert into mytable (pkvariable) values (1)
set identity_insert mytable off

这假设您使用自动增量身份作为主键。

【讨论】:

以上是关于如何为特定的新主键记录插入默认值记录?的主要内容,如果未能解决你的问题,请参考以下文章

mybatis insertupdate delete默认返回值解释与如何设置返回表主键

更新CoreData模型版本时如何为实体的新属性设置默认值

JPA/Hibernate:如何为 @ManyToOne 插入默认值,其中值表示空条目

Rails:如何为 Rails activerecord 模型中的属性创建默认值? [复制]

Django 设置默认日志记录

HGDB中如何为大表增加新主键