如何为特定的新主键记录插入默认值记录?
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默认返回值解释与如何设置返回表主键
JPA/Hibernate:如何为 @ManyToOne 插入默认值,其中值表示空条目